comisai 1.0.16 → 1.0.18
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/node_modules/@comis/agent/package.json +1 -1
- package/node_modules/@comis/channels/package.json +1 -1
- package/node_modules/@comis/cli/dist/wizard/non-interactive.js +1 -0
- package/node_modules/@comis/cli/dist/wizard/steps/01-detect-existing.js +2 -0
- package/node_modules/@comis/cli/dist/wizard/steps/07-gateway.js +9 -0
- package/node_modules/@comis/cli/dist/wizard/steps/10-write-config.js +2 -0
- package/node_modules/@comis/cli/dist/wizard/steps/12-finish.js +5 -2
- package/node_modules/@comis/cli/dist/wizard/types.d.ts +1 -0
- package/node_modules/@comis/cli/package.json +1 -1
- package/node_modules/@comis/core/dist/config/schema-gateway.d.ts +17 -2
- package/node_modules/@comis/core/dist/config/schema-gateway.js +11 -0
- package/node_modules/@comis/core/dist/config/schema.d.ts +60 -57
- package/node_modules/@comis/core/package.json +1 -1
- package/node_modules/@comis/daemon/dist/wiring/setup-gateway.js +34 -6
- package/node_modules/@comis/daemon/package.json +1 -1
- package/node_modules/@comis/gateway/package.json +1 -1
- package/node_modules/@comis/infra/package.json +1 -1
- package/node_modules/@comis/memory/package.json +1 -1
- package/node_modules/@comis/scheduler/package.json +1 -1
- package/node_modules/@comis/shared/package.json +1 -1
- package/node_modules/@comis/skills/package.json +1 -1
- package/node_modules/@comis/web/dist/android-chrome-192x192.png +0 -0
- package/node_modules/@comis/web/dist/android-chrome-512x512.png +0 -0
- package/node_modules/@comis/web/dist/apple-touch-icon.png +0 -0
- package/node_modules/@comis/web/dist/assets/agent-detail-BG9MGWWj.js +615 -0
- package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +2173 -0
- package/node_modules/@comis/web/dist/assets/agent-list-LHCJ4rw2.js +504 -0
- package/node_modules/@comis/web/dist/assets/approvals-q9VH_IKr.js +54 -0
- package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +375 -0
- package/node_modules/@comis/web/dist/assets/channel-detail-CaInesJM.js +681 -0
- package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +323 -0
- package/node_modules/@comis/web/dist/assets/chat-console-CNmzl0JW.js +943 -0
- package/node_modules/@comis/web/dist/assets/config-editor-DX4ITw6y.js +1374 -0
- package/node_modules/@comis/web/dist/assets/context-dag-browser-BwiaF5tf.js +393 -0
- package/node_modules/@comis/web/dist/assets/context-engine-BZ5Am6hA.js +393 -0
- package/node_modules/@comis/web/dist/assets/delivery-view-OfBZof-m.js +392 -0
- package/node_modules/@comis/web/dist/assets/diagnostics-view-YFwCxgr2.js +231 -0
- package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +1 -0
- package/node_modules/@comis/web/dist/assets/extract-variables-BM5qyK-s.js +149 -0
- package/node_modules/@comis/web/dist/assets/ic-array-editor-B7m6x7-S.js +118 -0
- package/node_modules/@comis/web/dist/assets/ic-breadcrumb-CUMpp3BL.js +75 -0
- package/node_modules/@comis/web/dist/assets/ic-budget-segment-bar-BtJ6x5mN.js +64 -0
- package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +352 -0
- package/node_modules/@comis/web/dist/assets/ic-confirm-dialog-CCDbB04e.js +110 -0
- package/node_modules/@comis/web/dist/assets/ic-connection-dot-CnT1b8xr.js +54 -0
- package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +277 -0
- package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +67 -0
- package/node_modules/@comis/web/dist/assets/ic-detail-panel-BF83r-if.js +116 -0
- package/node_modules/@comis/web/dist/assets/ic-empty-state-60l2ePhd.js +52 -0
- package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +359 -0
- package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +33 -0
- package/node_modules/@comis/web/dist/assets/ic-layer-waterfall-COvEYMg5.js +69 -0
- package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +12 -0
- package/node_modules/@comis/web/dist/assets/ic-search-input-CSOxY9g7.js +92 -0
- package/node_modules/@comis/web/dist/assets/ic-select-Ce-Raudx.js +127 -0
- package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +95 -0
- package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +33 -0
- package/node_modules/@comis/web/dist/assets/ic-time-range-picker-CypCT68y.js +93 -0
- package/node_modules/@comis/web/dist/assets/ic-tool-call-7MaXSsCW.js +146 -0
- package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +2830 -0
- package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +1 -0
- package/node_modules/@comis/web/dist/assets/mcp-management-BNZPnpDn.js +582 -0
- package/node_modules/@comis/web/dist/assets/media-config-BBvTYxOX.js +314 -0
- package/node_modules/@comis/web/dist/assets/media-test-BkK3RCRK.js +496 -0
- package/node_modules/@comis/web/dist/assets/memory-inspector-1hDGCGat.js +1139 -0
- package/node_modules/@comis/web/dist/assets/message-center-CXefwsUu.js +785 -0
- package/node_modules/@comis/web/dist/assets/models-C1qcU_j3.js +894 -0
- package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +1 -0
- package/node_modules/@comis/web/dist/assets/observe-view-C0VBhX4C.js +814 -0
- package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +1496 -0
- package/node_modules/@comis/web/dist/assets/pipeline-history-DkfOQ6SW.js +317 -0
- package/node_modules/@comis/web/dist/assets/pipeline-history-detail-hyHgD0ai.js +287 -0
- package/node_modules/@comis/web/dist/assets/pipeline-list-BPW8hV-q.js +518 -0
- package/node_modules/@comis/web/dist/assets/pipeline-monitor-Bip16T7e.js +972 -0
- package/node_modules/@comis/web/dist/assets/scheduler-BGgwKd06.js +1182 -0
- package/node_modules/@comis/web/dist/assets/security-D15st4xx.js +1224 -0
- package/node_modules/@comis/web/dist/assets/session-detail-SGEYNJ0M.js +632 -0
- package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +1 -0
- package/node_modules/@comis/web/dist/assets/session-list-6ybUTxbY.js +231 -0
- package/node_modules/@comis/web/dist/assets/setup-wizard-nT0tz9QP.js +853 -0
- package/node_modules/@comis/web/dist/assets/skills-D8yVfSUy.js +1051 -0
- package/node_modules/@comis/web/dist/assets/subagents-HHXMeHYo.js +193 -0
- package/node_modules/@comis/web/dist/assets/workspace-manager-BQlr10iH.js +785 -0
- package/node_modules/@comis/web/dist/comis-logo.png +0 -0
- package/node_modules/@comis/web/dist/favicon-16x16.png +0 -0
- package/node_modules/@comis/web/dist/favicon-32x32.png +0 -0
- package/node_modules/@comis/web/dist/favicon.ico +0 -0
- package/node_modules/@comis/web/dist/index.html +17 -0
- package/node_modules/@comis/web/package.json +29 -0
- package/package.json +15 -13
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import{s as _,i as g,n as p,a as y,b as i,t as b,A as m,f as x,r as d}from"./index-CEcM1R_C.js";import"./ic-time-range-picker-CypCT68y.js";import"./ic-relative-time-3FqpjeAI.js";import"./ic-delivery-row-GP5Fkygs.js";import"./ic-detail-panel-BF83r-if.js";import"./ic-empty-state-60l2ePhd.js";import"./ic-tag-CPPUnDLF.js";import"./ic-icon-xeGTVhVG.js";var w=Object.defineProperty,$=Object.getOwnPropertyDescriptor,h=(e,t,a,r)=>{for(var s=r>1?void 0:r?$(t,a):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(s=(r?o(t,a,s):o(s))||s);return r&&s&&w(t,a,s),s};function f(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${e}ms`}let u=class extends y{constructor(){super(...arguments),this.steps=[],this.totalDurationMs=0}_getTotalDuration(){return this.totalDurationMs>0?this.totalDurationMs:this.steps.reduce((e,t)=>e+t.durationMs,0)}render(){if(this.steps.length===0)return i`<div class="empty">No trace steps available</div>`;const e=this._getTotalDuration();let t=0;return i`
|
|
2
|
+
${this.steps.map(a=>{const r=e>0?t/e*100:0,s=e>0?a.durationMs/e*100:0;return t+=a.durationMs,i`
|
|
3
|
+
<div class="step-row">
|
|
4
|
+
<span class="step-name" title="${a.name}">${a.name}</span>
|
|
5
|
+
<div class="track">
|
|
6
|
+
<div
|
|
7
|
+
class="fill fill--${a.status}"
|
|
8
|
+
style="left: ${r}%; width: ${s}%;"
|
|
9
|
+
title="${a.name}: ${f(a.durationMs)}"
|
|
10
|
+
></div>
|
|
11
|
+
</div>
|
|
12
|
+
<span class="duration">${f(a.durationMs)}</span>
|
|
13
|
+
</div>
|
|
14
|
+
${a.error?i`<div class="error-text">${a.error}</div>`:""}
|
|
15
|
+
`})}
|
|
16
|
+
`}};u.styles=[_,g`
|
|
17
|
+
:host {
|
|
18
|
+
display: block;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.step-row {
|
|
22
|
+
display: grid;
|
|
23
|
+
grid-template-columns: 140px 1fr 60px;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: var(--ic-space-sm);
|
|
26
|
+
padding: 2px 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.step-name {
|
|
30
|
+
font-size: var(--ic-text-xs);
|
|
31
|
+
color: var(--ic-text-dim);
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
text-overflow: ellipsis;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.track {
|
|
38
|
+
height: 16px;
|
|
39
|
+
background: var(--ic-surface-2, #1f2937);
|
|
40
|
+
border-radius: var(--ic-radius-sm, 4px);
|
|
41
|
+
position: relative;
|
|
42
|
+
overflow: hidden;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.fill {
|
|
46
|
+
position: absolute;
|
|
47
|
+
top: 0;
|
|
48
|
+
height: 100%;
|
|
49
|
+
border-radius: var(--ic-radius-sm, 4px);
|
|
50
|
+
min-width: 2px;
|
|
51
|
+
transition: width var(--ic-transition, 150ms ease),
|
|
52
|
+
left var(--ic-transition, 150ms ease);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.fill--ok {
|
|
56
|
+
background: var(--ic-success);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.fill--error {
|
|
60
|
+
background: var(--ic-error);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.duration {
|
|
64
|
+
font-size: var(--ic-text-xs);
|
|
65
|
+
color: var(--ic-text-dim);
|
|
66
|
+
font-family: var(--ic-font-mono, ui-monospace, monospace);
|
|
67
|
+
text-align: right;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.error-text {
|
|
71
|
+
grid-column: 1 / -1;
|
|
72
|
+
font-size: var(--ic-text-xs);
|
|
73
|
+
color: var(--ic-error);
|
|
74
|
+
padding-left: 140px;
|
|
75
|
+
padding-bottom: 2px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.empty {
|
|
79
|
+
font-size: var(--ic-text-sm);
|
|
80
|
+
color: var(--ic-text-dim);
|
|
81
|
+
font-style: italic;
|
|
82
|
+
}
|
|
83
|
+
`];h([p({attribute:!1})],u.prototype,"steps",2);h([p({type:Number})],u.prototype,"totalDurationMs",2);u=h([b("ic-trace-timeline")],u);var S=Object.defineProperty,T=Object.getOwnPropertyDescriptor,c=(e,t,a,r)=>{for(var s=r>1?void 0:r?T(t,a):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(s=(r?o(t,a,s):o(s))||s);return r&&s&&S(t,a,s),s};const C=3e4,M=6048e5;let l=class extends y{constructor(){super(...arguments),this.rpcClient=null,this._loadState="loading",this._sinceMs=M,this._selectedRange="7d",this._searchQuery="",this._statusFilter="all",this._channelFilter="all",this._deliveryStats=null,this._traces=[],this._selectedTrace=null,this._detailOpen=!1,this._latencyPercentiles=null,this._refreshInterval=null,this._rpcStatusUnsub=null,this._fmtNum=new Intl.NumberFormat("en-US")}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),this._refreshInterval!==null&&(clearInterval(this._refreshInterval),this._refreshInterval=null),this._rpcStatusUnsub?.(),this._rpcStatusUnsub=null}willUpdate(e){e.has("rpcClient")&&this.rpcClient&&this._tryLoad()}_tryLoad(){if(!this.rpcClient){this._loadState="loaded";return}this._rpcStatusUnsub?.(),this.rpcClient.status==="connected"?this._startLoading():this._rpcStatusUnsub=this.rpcClient.onStatusChange(e=>{e==="connected"&&this._startLoading()})}_startLoading(){this._loadData(),this._refreshInterval===null&&(this._refreshInterval=setInterval(()=>{this._loadData()},C))}async _loadData(){if(!this.rpcClient||this.rpcClient.status!=="connected"){this._loadState="loaded";return}const e=this.rpcClient;try{const[t,a]=await Promise.allSettled([e.call("obs.delivery.stats",{sinceMs:this._sinceMs}),e.call("obs.delivery.recent",{sinceMs:this._sinceMs,limit:200})]);if(t.status==="rejected"&&a.status==="rejected")throw t.reason;if(t.status==="fulfilled"){const r=t.value;this._deliveryStats={total:Number(r.totalDelivered??r.total??0),successes:Number(r.successes??Math.round(Number(r.totalDelivered??0)*Number(r.successRate??0)/100)),failures:Number(r.failed??r.failures??0),avgLatencyMs:Number(r.avgLatencyMs??0)}}if(a.status==="fulfilled"){const r=a.value;if(Array.isArray(r))this._traces=r.map(s=>this._normalizeTrace(s));else{const s=r,n=Array.isArray(s.traces)?s.traces:Array.isArray(s.deliveries)?s.deliveries:[];this._traces=n.map(o=>this._normalizeTrace(o))}}this._computeLatencyPercentiles(),this._loadState="loaded"}catch{this._loadState="error"}}_normalizeTrace(e){const t=String(e.traceId??`${e.sourceChannelId??"unknown"}-${e.deliveredAt??Date.now()}`),a=Number(e.timestamp??e.deliveredAt??Date.now()),r=String(e.sourceChannelType??e.targetChannelType??e.channelType??"unknown"),s=String(e.metadata?.messagePreview??(typeof e.message=="string"?e.message.slice(0,80):e.messagePreview??"...")),n=e.status==="failed"?"failed":e.status==="timeout"?"timeout":typeof e.success=="boolean"?e.success?"success":"failed":"success",o=e.latencyMs!=null?Number(e.latencyMs):null,v=Array.isArray(e.steps)?e.steps:[];return{traceId:t,timestamp:a,channelType:r,messagePreview:s,status:n,latencyMs:o,stepCount:v.length,steps:v}}_computeLatencyPercentiles(){const e=this._traces.map(t=>t.latencyMs).filter(t=>t!=null).sort((t,a)=>t-a);if(e.length===0){this._latencyPercentiles=null;return}this._latencyPercentiles={p50:e[Math.floor(e.length*.5)],p95:e[Math.floor(e.length*.95)],p99:e[Math.floor(e.length*.99)]}}get _filteredTraces(){let e=this._traces;if(this._searchQuery){const t=this._searchQuery.toLowerCase();e=e.filter(a=>a.messagePreview.toLowerCase().includes(t)||a.channelType.toLowerCase().includes(t))}return this._statusFilter!=="all"&&(e=e.filter(t=>t.status===this._statusFilter)),this._channelFilter!=="all"&&(e=e.filter(t=>t.channelType===this._channelFilter)),e}get _uniqueChannels(){return[...new Set(this._traces.map(e=>e.channelType))].sort()}get _successRate(){if(this._deliveryStats&&this._deliveryStats.total>0)return Math.round(this._deliveryStats.successes/this._deliveryStats.total*100);if(this._traces.length===0)return 0;const e=this._traces.filter(t=>t.status==="success").length;return Math.round(e/this._traces.length*100)}get _channelRates(){const e=new Map;for(const t of this._traces){const a=e.get(t.channelType)??{ok:0,total:0};a.total++,t.status==="success"&&a.ok++,e.set(t.channelType,a)}return[...e.entries()].map(([t,a])=>({channel:t,rate:Math.round(a.ok/a.total*100)})).sort((t,a)=>t.channel.localeCompare(a.channel))}_onTimeRangeChange(e){this._sinceMs=e.detail.sinceMs,this._selectedRange=e.detail.label,this._loadData()}_onSearchInput(e){this._searchQuery=e.target.value}_onStatusFilter(e){this._statusFilter=e.target.value}_onChannelFilter(e){this._channelFilter=e.target.value}_onTraceClick(e){const t=this._traces.find(a=>a.traceId===e.detail);t&&(this._selectedTrace=t,this._detailOpen=!0)}_closeDetail(){this._detailOpen=!1,this._selectedTrace=null}_formatLatency(e,t=!1){if(e==null)return"--";const a=t?"~":"";return e>=1e3?`${a}${(e/1e3).toFixed(1)}s`:`${a}${e}ms`}_rateClass(e){return e>=95?"rate-good":e>=90?"rate-warn":"rate-bad"}_renderStats(){const e=this._successRate,t=this._latencyPercentiles,a=this._traces.length<10,r=this._deliveryStats?.total??this._traces.length;return i`
|
|
84
|
+
<div class="stats-row">
|
|
85
|
+
<ic-stat-card
|
|
86
|
+
label="Success Rate"
|
|
87
|
+
.value=${`${e}%`}
|
|
88
|
+
></ic-stat-card>
|
|
89
|
+
<ic-stat-card
|
|
90
|
+
label="P50 Latency"
|
|
91
|
+
.value=${t?this._formatLatency(t.p50,a):"--"}
|
|
92
|
+
></ic-stat-card>
|
|
93
|
+
<ic-stat-card
|
|
94
|
+
label="P95 Latency"
|
|
95
|
+
.value=${t?this._formatLatency(t.p95,a):"--"}
|
|
96
|
+
></ic-stat-card>
|
|
97
|
+
<ic-stat-card
|
|
98
|
+
label="P99 Latency"
|
|
99
|
+
.value=${t?this._formatLatency(t.p99,a):"--"}
|
|
100
|
+
></ic-stat-card>
|
|
101
|
+
<ic-stat-card
|
|
102
|
+
label="Total Deliveries"
|
|
103
|
+
.value=${this._fmtNum.format(r)}
|
|
104
|
+
></ic-stat-card>
|
|
105
|
+
</div>
|
|
106
|
+
${this._channelRates.length>1?i`
|
|
107
|
+
<div class="channel-rates">
|
|
108
|
+
${this._channelRates.map(s=>i`
|
|
109
|
+
<span class="channel-rate">
|
|
110
|
+
${s.channel}:
|
|
111
|
+
<span class="channel-rate-value ${this._rateClass(s.rate)}">${s.rate}%</span>
|
|
112
|
+
</span>
|
|
113
|
+
`)}
|
|
114
|
+
</div>
|
|
115
|
+
`:m}
|
|
116
|
+
`}_renderFilters(){const e=this._filteredTraces;return i`
|
|
117
|
+
<div class="filter-row">
|
|
118
|
+
<input
|
|
119
|
+
class="filter-input"
|
|
120
|
+
type="text"
|
|
121
|
+
placeholder="Search traces..."
|
|
122
|
+
.value=${this._searchQuery}
|
|
123
|
+
@input=${this._onSearchInput}
|
|
124
|
+
/>
|
|
125
|
+
<select class="filter-select" @change=${this._onStatusFilter}>
|
|
126
|
+
<option value="all">All Status</option>
|
|
127
|
+
<option value="success" ?selected=${this._statusFilter==="success"}>Success</option>
|
|
128
|
+
<option value="failed" ?selected=${this._statusFilter==="failed"}>Failed</option>
|
|
129
|
+
<option value="timeout" ?selected=${this._statusFilter==="timeout"}>Timeout</option>
|
|
130
|
+
</select>
|
|
131
|
+
<select class="filter-select" @change=${this._onChannelFilter}>
|
|
132
|
+
<option value="all">All Channels</option>
|
|
133
|
+
${this._uniqueChannels.map(t=>i`<option value=${t} ?selected=${this._channelFilter===t}>${t}</option>`)}
|
|
134
|
+
</select>
|
|
135
|
+
<span class="filter-count">Showing ${e.length} of ${this._traces.length} traces</span>
|
|
136
|
+
</div>
|
|
137
|
+
`}_renderTraceTable(){const e=this._filteredTraces;return e.length===0?i`<ic-empty-state icon="activity" message="No delivery traces match your filters"></ic-empty-state>`:i`
|
|
138
|
+
<div class="trace-table" role="table" aria-label="Delivery traces">
|
|
139
|
+
<div class="table-header" role="row">
|
|
140
|
+
<div class="cell" role="columnheader">Time</div>
|
|
141
|
+
<div class="cell" role="columnheader">Channel</div>
|
|
142
|
+
<div class="cell" role="columnheader">Message</div>
|
|
143
|
+
<div class="cell" role="columnheader">Status</div>
|
|
144
|
+
<div class="cell" role="columnheader">Latency</div>
|
|
145
|
+
<div class="cell" role="columnheader">Steps</div>
|
|
146
|
+
</div>
|
|
147
|
+
${e.map(t=>i`
|
|
148
|
+
<ic-delivery-row
|
|
149
|
+
.trace=${t}
|
|
150
|
+
@trace-click=${this._onTraceClick}
|
|
151
|
+
></ic-delivery-row>
|
|
152
|
+
`)}
|
|
153
|
+
</div>
|
|
154
|
+
`}_renderDetailDrawer(){const e=this._selectedTrace;if(!e)return m;const t=e.steps??[],a=new Date(e.timestamp).toLocaleString();return i`
|
|
155
|
+
<ic-detail-panel
|
|
156
|
+
?open=${this._detailOpen}
|
|
157
|
+
.panelTitle=${"Trace "+e.traceId.slice(0,16)}
|
|
158
|
+
@close=${this._closeDetail}
|
|
159
|
+
>
|
|
160
|
+
<div class="detail-cards">
|
|
161
|
+
<div class="detail-card">
|
|
162
|
+
<div class="detail-card-label">Channel</div>
|
|
163
|
+
<div class="detail-card-value">${e.channelType}</div>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="detail-card">
|
|
166
|
+
<div class="detail-card-label">Status</div>
|
|
167
|
+
<div class="detail-card-value status-${e.status}">${e.status}</div>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="detail-card">
|
|
170
|
+
<div class="detail-card-label">Latency</div>
|
|
171
|
+
<div class="detail-card-value">${this._formatLatency(e.latencyMs)}</div>
|
|
172
|
+
</div>
|
|
173
|
+
<div class="detail-card">
|
|
174
|
+
<div class="detail-card-label">Timestamp</div>
|
|
175
|
+
<div class="detail-card-value">${a}</div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<div class="section-title">Execution Timeline</div>
|
|
180
|
+
${t.length>0?i`<ic-trace-timeline .steps=${t}></ic-trace-timeline>`:i`<p class="no-steps">No step details available</p>`}
|
|
181
|
+
</ic-detail-panel>
|
|
182
|
+
`}render(){return this._loadState==="loading"&&!this.rpcClient?i`<ic-skeleton-view variant="table"></ic-skeleton-view>`:this._loadState==="error"?i`
|
|
183
|
+
<div class="error-container">
|
|
184
|
+
<span class="error-message">Failed to load delivery data</span>
|
|
185
|
+
<button class="retry-btn" @click=${()=>this._tryLoad()}>Retry</button>
|
|
186
|
+
</div>
|
|
187
|
+
`:i`
|
|
188
|
+
<div class="delivery-view">
|
|
189
|
+
<div class="header">
|
|
190
|
+
<span class="header-title">Delivery</span>
|
|
191
|
+
<ic-time-range-picker
|
|
192
|
+
.selected=${this._selectedRange}
|
|
193
|
+
@time-range-change=${this._onTimeRangeChange}
|
|
194
|
+
></ic-time-range-picker>
|
|
195
|
+
</div>
|
|
196
|
+
${this._renderStats()}
|
|
197
|
+
${this._renderFilters()}
|
|
198
|
+
${this._renderTraceTable()}
|
|
199
|
+
${this._renderDetailDrawer()}
|
|
200
|
+
</div>
|
|
201
|
+
`}};l.styles=[_,x,g`
|
|
202
|
+
:host { display: block; }
|
|
203
|
+
|
|
204
|
+
.delivery-view { padding: 0; }
|
|
205
|
+
|
|
206
|
+
.header {
|
|
207
|
+
display: flex;
|
|
208
|
+
justify-content: space-between;
|
|
209
|
+
align-items: center;
|
|
210
|
+
margin-bottom: var(--ic-space-lg);
|
|
211
|
+
flex-wrap: wrap;
|
|
212
|
+
gap: var(--ic-space-sm);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.header-title {
|
|
216
|
+
font-size: var(--ic-text-base);
|
|
217
|
+
font-weight: 600;
|
|
218
|
+
color: var(--ic-text);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.stats-row {
|
|
222
|
+
display: grid;
|
|
223
|
+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
224
|
+
gap: var(--ic-space-md);
|
|
225
|
+
margin-bottom: var(--ic-space-lg);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.filter-row {
|
|
229
|
+
display: flex;
|
|
230
|
+
gap: var(--ic-space-sm);
|
|
231
|
+
flex-wrap: wrap;
|
|
232
|
+
margin-bottom: var(--ic-space-md);
|
|
233
|
+
align-items: center;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.filter-input {
|
|
237
|
+
background: var(--ic-surface);
|
|
238
|
+
border: 1px solid var(--ic-border);
|
|
239
|
+
border-radius: var(--ic-radius-md);
|
|
240
|
+
color: var(--ic-text);
|
|
241
|
+
padding: 0.375rem 0.625rem;
|
|
242
|
+
font-size: var(--ic-text-sm);
|
|
243
|
+
font-family: inherit;
|
|
244
|
+
min-width: 12rem;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.filter-input::placeholder { color: var(--ic-text-dim); }
|
|
248
|
+
.filter-input:focus-visible { outline: 2px solid var(--ic-accent); outline-offset: 2px; }
|
|
249
|
+
|
|
250
|
+
.filter-select {
|
|
251
|
+
background: var(--ic-surface);
|
|
252
|
+
border: 1px solid var(--ic-border);
|
|
253
|
+
border-radius: var(--ic-radius-md);
|
|
254
|
+
color: var(--ic-text);
|
|
255
|
+
padding: 0.375rem 0.625rem;
|
|
256
|
+
font-size: var(--ic-text-sm);
|
|
257
|
+
cursor: pointer;
|
|
258
|
+
font-family: inherit;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.filter-select:focus-visible { outline: 2px solid var(--ic-accent); outline-offset: 2px; }
|
|
262
|
+
|
|
263
|
+
.filter-count {
|
|
264
|
+
font-size: var(--ic-text-xs);
|
|
265
|
+
color: var(--ic-text-dim);
|
|
266
|
+
margin-left: auto;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.trace-table {
|
|
270
|
+
display: grid;
|
|
271
|
+
grid-template-columns: auto auto 1fr auto auto auto;
|
|
272
|
+
gap: 0;
|
|
273
|
+
font-size: var(--ic-text-sm);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.table-header {
|
|
277
|
+
display: contents;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.table-header > .cell {
|
|
281
|
+
font-weight: 600;
|
|
282
|
+
color: var(--ic-text-dim);
|
|
283
|
+
text-transform: uppercase;
|
|
284
|
+
letter-spacing: 0.05em;
|
|
285
|
+
font-size: var(--ic-text-xs);
|
|
286
|
+
padding: var(--ic-space-sm) var(--ic-space-md);
|
|
287
|
+
border-bottom: 1px solid var(--ic-border);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.section { margin-bottom: var(--ic-space-xl); }
|
|
291
|
+
|
|
292
|
+
.section-title {
|
|
293
|
+
font-size: var(--ic-text-base);
|
|
294
|
+
font-weight: 600;
|
|
295
|
+
color: var(--ic-text);
|
|
296
|
+
margin-bottom: var(--ic-space-md);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.card {
|
|
300
|
+
background: var(--ic-surface);
|
|
301
|
+
border: 1px solid var(--ic-border);
|
|
302
|
+
border-radius: var(--ic-radius-lg);
|
|
303
|
+
padding: var(--ic-space-lg);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* Detail drawer content */
|
|
307
|
+
.detail-cards {
|
|
308
|
+
display: grid;
|
|
309
|
+
grid-template-columns: 1fr 1fr;
|
|
310
|
+
gap: var(--ic-space-sm);
|
|
311
|
+
margin-bottom: var(--ic-space-lg);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.detail-card {
|
|
315
|
+
background: var(--ic-surface-2, #1f2937);
|
|
316
|
+
border: 1px solid var(--ic-border);
|
|
317
|
+
border-radius: var(--ic-radius-md);
|
|
318
|
+
padding: var(--ic-space-sm) var(--ic-space-md);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.detail-card-label {
|
|
322
|
+
font-size: var(--ic-text-xs);
|
|
323
|
+
color: var(--ic-text-dim);
|
|
324
|
+
text-transform: uppercase;
|
|
325
|
+
letter-spacing: 0.05em;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.detail-card-value {
|
|
329
|
+
font-size: var(--ic-text-sm);
|
|
330
|
+
font-weight: 600;
|
|
331
|
+
color: var(--ic-text);
|
|
332
|
+
margin-top: 2px;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.detail-card-value.status-success { color: var(--ic-success); }
|
|
336
|
+
.detail-card-value.status-failed { color: var(--ic-error); }
|
|
337
|
+
.detail-card-value.status-timeout { color: var(--ic-warning); }
|
|
338
|
+
|
|
339
|
+
.no-steps {
|
|
340
|
+
font-size: var(--ic-text-sm);
|
|
341
|
+
color: var(--ic-text-dim);
|
|
342
|
+
font-style: italic;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/* Per-channel success rates */
|
|
346
|
+
.channel-rates {
|
|
347
|
+
display: flex;
|
|
348
|
+
gap: var(--ic-space-md);
|
|
349
|
+
flex-wrap: wrap;
|
|
350
|
+
margin-top: var(--ic-space-sm);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.channel-rate {
|
|
354
|
+
display: flex;
|
|
355
|
+
align-items: center;
|
|
356
|
+
gap: var(--ic-space-xs);
|
|
357
|
+
font-size: var(--ic-text-xs);
|
|
358
|
+
color: var(--ic-text-dim);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.channel-rate-value {
|
|
362
|
+
font-weight: 600;
|
|
363
|
+
font-family: var(--ic-font-mono, ui-monospace, monospace);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.channel-rate-value.rate-good { color: var(--ic-success); }
|
|
367
|
+
.channel-rate-value.rate-warn { color: var(--ic-warning); }
|
|
368
|
+
.channel-rate-value.rate-bad { color: var(--ic-error); }
|
|
369
|
+
|
|
370
|
+
.error-container {
|
|
371
|
+
display: flex;
|
|
372
|
+
flex-direction: column;
|
|
373
|
+
align-items: center;
|
|
374
|
+
gap: 0.75rem;
|
|
375
|
+
padding: 3rem;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.error-message { color: var(--ic-error); font-size: 0.875rem; }
|
|
379
|
+
|
|
380
|
+
.retry-btn {
|
|
381
|
+
padding: 0.5rem 1rem;
|
|
382
|
+
background: var(--ic-surface);
|
|
383
|
+
border: 1px solid var(--ic-border);
|
|
384
|
+
border-radius: 0.375rem;
|
|
385
|
+
color: var(--ic-text);
|
|
386
|
+
font-size: 0.8125rem;
|
|
387
|
+
cursor: pointer;
|
|
388
|
+
font-family: inherit;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.retry-btn:hover { background: var(--ic-surface-alt, #374151); }
|
|
392
|
+
`];c([p({attribute:!1})],l.prototype,"rpcClient",2);c([d()],l.prototype,"_loadState",2);c([d()],l.prototype,"_sinceMs",2);c([d()],l.prototype,"_selectedRange",2);c([d()],l.prototype,"_searchQuery",2);c([d()],l.prototype,"_statusFilter",2);c([d()],l.prototype,"_channelFilter",2);c([d()],l.prototype,"_deliveryStats",2);c([d()],l.prototype,"_traces",2);c([d()],l.prototype,"_selectedTrace",2);c([d()],l.prototype,"_detailOpen",2);c([d()],l.prototype,"_latencyPercentiles",2);l=c([b("ic-delivery-view")],l);export{l as IcDeliveryView};
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import{a as g,S as m,b as l,A as _,s as f,f as b,i as y,n as u,r as o,t as x}from"./index-CEcM1R_C.js";import{a as d,d as v}from"./observability-types-D7jUtSde.js";import"./ic-time-range-picker-CypCT68y.js";import"./ic-tag-CPPUnDLF.js";import"./ic-relative-time-3FqpjeAI.js";import"./ic-empty-state-60l2ePhd.js";import"./ic-icon-xeGTVhVG.js";var S=Object.defineProperty,C=Object.getOwnPropertyDescriptor,a=(t,e,i,n)=>{for(var r=n>1?void 0:n?C(e,i):e,c=t.length-1,p;c>=0;c--)(p=t[c])&&(r=(n?p(e,i,r):p(r))||r);return n&&r&&S(e,i,r),r};const w=3e4,D=6048e5,h={info:"var(--ic-text-dim)",warn:"var(--ic-warning)",error:"var(--ic-error)"};let s=class extends g{constructor(){super(...arguments),this.rpcClient=null,this.eventDispatcher=null,this._sse=null,this._reloadDebounce=null,this._loadState="loading",this._sinceMs=D,this._selectedRange="7d",this._events=[],this._selectedCategories=new Set,this._selectedSeverities=new Set,this._eventCounts={},this._refreshInterval=null,this._rpcStatusUnsub=null}connectedCallback(){super.connectedCallback(),this._initSse()}_initSse(){!this.eventDispatcher||this._sse||(this._sse=new m(this,this.eventDispatcher,{"observability:reset":()=>{this._scheduleReload()}}))}_scheduleReload(t=300){this._reloadDebounce!==null&&clearTimeout(this._reloadDebounce),this._reloadDebounce=setTimeout(()=>{this._reloadDebounce=null,this._loadData()},t)}disconnectedCallback(){super.disconnectedCallback(),this._reloadDebounce!==null&&(clearTimeout(this._reloadDebounce),this._reloadDebounce=null),this._refreshInterval!==null&&(clearInterval(this._refreshInterval),this._refreshInterval=null),this._rpcStatusUnsub?.(),this._rpcStatusUnsub=null}willUpdate(t){t.has("rpcClient")&&this.rpcClient&&this._tryLoad(),t.has("eventDispatcher")&&this.eventDispatcher&&!this._sse&&this._initSse()}_tryLoad(){if(!this.rpcClient){this._loadState="loaded";return}this._rpcStatusUnsub?.(),this.rpcClient.status==="connected"?this._startLoading():this._rpcStatusUnsub=this.rpcClient.onStatusChange(t=>{t==="connected"&&this._startLoading()})}_startLoading(){this._loadData(),this._refreshInterval===null&&(this._refreshInterval=setInterval(()=>{this._loadData()},w))}async _loadData(){if(!this.rpcClient||this.rpcClient.status!=="connected"){this._loadState="loaded";return}const t=this.rpcClient;try{const e=await t.call("obs.diagnostics",{sinceMs:this._sinceMs,limit:500});if(Array.isArray(e))this._events=e,this._eventCounts=this._computeCounts(e);else{const i=Array.isArray(e.events)?e.events:[];this._events=i,this._eventCounts=e.counts??this._computeCounts(i)}this._loadState="loaded"}catch{this._loadState="error"}}_computeCounts(t){const e={};for(const i of t)e[i.category]=(e[i.category]??0)+1;return e}get _filteredEvents(){let t=this._events;return this._selectedCategories.size>0&&(t=t.filter(e=>this._selectedCategories.has(e.category))),this._selectedSeverities.size>0&&(t=t.filter(e=>this._selectedSeverities.has(d(e)))),t.sort((e,i)=>i.timestamp-e.timestamp)}get _categoryOptions(){return[...new Set(this._events.map(e=>e.category))].sort().map(e=>({value:e,label:`${e} (${this._eventCounts[e]??0})`}))}get _severityOptions(){return[...new Set(this._events.map(e=>d(e)))].sort().map(e=>({value:e,label:e,color:h[e]}))}_onTimeRangeChange(t){this._sinceMs=t.detail.sinceMs,this._selectedRange=t.detail.label,this._loadData()}_onCategoryFilter(t){this._selectedCategories=t.detail.selected}_onSeverityFilter(t){this._selectedSeverities=t.detail.selected}_exportJsonl(){const t=this._filteredEvents;if(t.length===0)return;const e=t.map(c=>JSON.stringify(c)).join(`
|
|
2
|
+
`),i=new Blob([e],{type:"application/jsonl"}),n=URL.createObjectURL(i),r=document.createElement("a");r.href=n,r.download=`diagnostics-${new Date().toISOString().slice(0,10)}.jsonl`,r.click(),URL.revokeObjectURL(n)}_renderFilters(){return l`
|
|
3
|
+
<div class="filter-section">
|
|
4
|
+
<div class="filter-group">
|
|
5
|
+
<span class="filter-label">Category</span>
|
|
6
|
+
<ic-filter-chips
|
|
7
|
+
.options=${this._categoryOptions}
|
|
8
|
+
.selected=${this._selectedCategories}
|
|
9
|
+
@filter-change=${this._onCategoryFilter}
|
|
10
|
+
></ic-filter-chips>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="filter-group">
|
|
13
|
+
<span class="filter-label">Severity</span>
|
|
14
|
+
<ic-filter-chips
|
|
15
|
+
.options=${this._severityOptions}
|
|
16
|
+
.selected=${this._selectedSeverities}
|
|
17
|
+
@filter-change=${this._onSeverityFilter}
|
|
18
|
+
></ic-filter-chips>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
`}_renderSummary(){const t=this._filteredEvents;return l`
|
|
22
|
+
<div class="summary-bar">
|
|
23
|
+
Showing ${t.length} of ${this._events.length} events
|
|
24
|
+
</div>
|
|
25
|
+
`}_renderEventTable(){const t=this._filteredEvents;return t.length===0?l`<ic-empty-state icon="activity" message="No diagnostic events match your filters"></ic-empty-state>`:l`
|
|
26
|
+
<div class="event-table" role="table" aria-label="Diagnostic events">
|
|
27
|
+
<div class="table-header" role="row">
|
|
28
|
+
<div class="cell" role="columnheader">Timestamp</div>
|
|
29
|
+
<div class="cell" role="columnheader">Category</div>
|
|
30
|
+
<div class="cell" role="columnheader">Message</div>
|
|
31
|
+
<div class="cell" role="columnheader">Severity</div>
|
|
32
|
+
</div>
|
|
33
|
+
${t.map(e=>l`
|
|
34
|
+
<div class="event-row" role="row">
|
|
35
|
+
<div class="cell" role="cell">
|
|
36
|
+
<ic-relative-time .timestamp=${e.timestamp}></ic-relative-time>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="cell" role="cell">
|
|
39
|
+
<ic-tag>${e.category}</ic-tag>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="cell cell-message" role="cell" title=${v(e)}>
|
|
42
|
+
${v(e)}
|
|
43
|
+
</div>
|
|
44
|
+
<div class="cell" role="cell">
|
|
45
|
+
<ic-tag
|
|
46
|
+
style="--tag-color: ${h[d(e)]??"var(--ic-text-dim)"}"
|
|
47
|
+
>${d(e)}</ic-tag>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
`)}
|
|
51
|
+
</div>
|
|
52
|
+
`}render(){if(this._loadState==="loading"&&!this.rpcClient)return l`<ic-skeleton-view variant="table"></ic-skeleton-view>`;if(this._loadState==="error")return l`
|
|
53
|
+
<div class="error-container">
|
|
54
|
+
<span class="error-message">Failed to load diagnostics data</span>
|
|
55
|
+
<button class="retry-btn" @click=${()=>this._tryLoad()}>Retry</button>
|
|
56
|
+
</div>
|
|
57
|
+
`;const t=this._filteredEvents;return l`
|
|
58
|
+
<div class="diagnostics-view">
|
|
59
|
+
<div class="header">
|
|
60
|
+
<div class="header-left">
|
|
61
|
+
<span class="header-title">Diagnostics</span>
|
|
62
|
+
</div>
|
|
63
|
+
<div class="header-right">
|
|
64
|
+
<button
|
|
65
|
+
class="export-btn"
|
|
66
|
+
?disabled=${t.length===0}
|
|
67
|
+
@click=${this._exportJsonl}
|
|
68
|
+
>
|
|
69
|
+
Export JSONL (${t.length} events)
|
|
70
|
+
</button>
|
|
71
|
+
<ic-time-range-picker
|
|
72
|
+
.selected=${this._selectedRange}
|
|
73
|
+
@time-range-change=${this._onTimeRangeChange}
|
|
74
|
+
></ic-time-range-picker>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
${this._events.length>0?this._renderFilters():_}
|
|
78
|
+
${this._renderSummary()}
|
|
79
|
+
${this._renderEventTable()}
|
|
80
|
+
</div>
|
|
81
|
+
`}};s.styles=[f,b,y`
|
|
82
|
+
:host { display: block; }
|
|
83
|
+
|
|
84
|
+
.diagnostics-view { padding: 0; }
|
|
85
|
+
|
|
86
|
+
.header {
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: space-between;
|
|
89
|
+
align-items: center;
|
|
90
|
+
margin-bottom: var(--ic-space-lg);
|
|
91
|
+
flex-wrap: wrap;
|
|
92
|
+
gap: var(--ic-space-sm);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.header-left {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: var(--ic-space-md);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.header-title {
|
|
102
|
+
font-size: var(--ic-text-base);
|
|
103
|
+
font-weight: 600;
|
|
104
|
+
color: var(--ic-text);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.header-right {
|
|
108
|
+
display: flex;
|
|
109
|
+
align-items: center;
|
|
110
|
+
gap: var(--ic-space-sm);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.export-btn {
|
|
114
|
+
display: inline-flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
gap: var(--ic-space-xs);
|
|
117
|
+
padding: 0.375rem 0.75rem;
|
|
118
|
+
background: var(--ic-surface);
|
|
119
|
+
border: 1px solid var(--ic-border);
|
|
120
|
+
border-radius: var(--ic-radius-md);
|
|
121
|
+
color: var(--ic-text);
|
|
122
|
+
font-size: var(--ic-text-sm);
|
|
123
|
+
cursor: pointer;
|
|
124
|
+
font-family: inherit;
|
|
125
|
+
transition: background var(--ic-transition), border-color var(--ic-transition);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.export-btn:hover:not(:disabled) {
|
|
129
|
+
background: var(--ic-surface-2, #1f2937);
|
|
130
|
+
border-color: var(--ic-text-dim);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.export-btn:disabled {
|
|
134
|
+
opacity: 0.5;
|
|
135
|
+
cursor: not-allowed;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.export-btn:focus-visible { outline: 2px solid var(--ic-accent); outline-offset: 2px; }
|
|
139
|
+
|
|
140
|
+
.filter-section {
|
|
141
|
+
display: flex;
|
|
142
|
+
flex-direction: column;
|
|
143
|
+
gap: var(--ic-space-sm);
|
|
144
|
+
margin-bottom: var(--ic-space-md);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.filter-group {
|
|
148
|
+
display: flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
gap: var(--ic-space-sm);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.filter-label {
|
|
154
|
+
font-size: var(--ic-text-xs);
|
|
155
|
+
color: var(--ic-text-dim);
|
|
156
|
+
text-transform: uppercase;
|
|
157
|
+
letter-spacing: 0.05em;
|
|
158
|
+
min-width: 5rem;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.summary-bar {
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: var(--ic-space-sm);
|
|
165
|
+
margin-bottom: var(--ic-space-md);
|
|
166
|
+
font-size: var(--ic-text-sm);
|
|
167
|
+
color: var(--ic-text-dim);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.event-table {
|
|
171
|
+
display: grid;
|
|
172
|
+
grid-template-columns: auto auto 1fr auto;
|
|
173
|
+
gap: 0;
|
|
174
|
+
font-size: var(--ic-text-sm);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.table-header {
|
|
178
|
+
display: contents;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.table-header > .cell {
|
|
182
|
+
font-weight: 600;
|
|
183
|
+
color: var(--ic-text-dim);
|
|
184
|
+
text-transform: uppercase;
|
|
185
|
+
letter-spacing: 0.05em;
|
|
186
|
+
font-size: var(--ic-text-xs);
|
|
187
|
+
padding: var(--ic-space-sm) var(--ic-space-md);
|
|
188
|
+
border-bottom: 1px solid var(--ic-border);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.event-row {
|
|
192
|
+
display: contents;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.event-row > .cell {
|
|
196
|
+
padding: var(--ic-space-xs) var(--ic-space-md);
|
|
197
|
+
border-bottom: 1px solid var(--ic-border);
|
|
198
|
+
color: var(--ic-text);
|
|
199
|
+
display: flex;
|
|
200
|
+
align-items: center;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.cell-message {
|
|
204
|
+
overflow: hidden;
|
|
205
|
+
text-overflow: ellipsis;
|
|
206
|
+
white-space: nowrap;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.error-container {
|
|
210
|
+
display: flex;
|
|
211
|
+
flex-direction: column;
|
|
212
|
+
align-items: center;
|
|
213
|
+
gap: 0.75rem;
|
|
214
|
+
padding: 3rem;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.error-message { color: var(--ic-error); font-size: 0.875rem; }
|
|
218
|
+
|
|
219
|
+
.retry-btn {
|
|
220
|
+
padding: 0.5rem 1rem;
|
|
221
|
+
background: var(--ic-surface);
|
|
222
|
+
border: 1px solid var(--ic-border);
|
|
223
|
+
border-radius: 0.375rem;
|
|
224
|
+
color: var(--ic-text);
|
|
225
|
+
font-size: 0.8125rem;
|
|
226
|
+
cursor: pointer;
|
|
227
|
+
font-family: inherit;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.retry-btn:hover { background: var(--ic-surface-alt, #374151); }
|
|
231
|
+
`];a([u({attribute:!1})],s.prototype,"rpcClient",2);a([u({attribute:!1})],s.prototype,"eventDispatcher",2);a([o()],s.prototype,"_loadState",2);a([o()],s.prototype,"_sinceMs",2);a([o()],s.prototype,"_selectedRange",2);a([o()],s.prototype,"_events",2);a([o()],s.prototype,"_selectedCategories",2);a([o()],s.prototype,"_selectedSeverities",2);a([o()],s.prototype,"_eventCounts",2);s=a([x("ic-diagnostics-view")],s);export{s as IcDiagnosticsView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const s={CHILD:2},$=r=>(...t)=>({_$litDirective$:r,values:t});class _{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{$ as e,_ as i,s as t};
|