comisai 1.0.23 → 1.0.25
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/dist/executor/pi-executor.js +17 -0
- package/node_modules/@comis/agent/dist/index.d.ts +2 -1
- package/node_modules/@comis/agent/dist/index.js +1 -1
- package/node_modules/@comis/agent/dist/model/auth-storage-adapter.d.ts +21 -0
- package/node_modules/@comis/agent/dist/model/auth-storage-adapter.js +15 -1
- package/node_modules/@comis/agent/dist/model/model-registry-adapter.d.ts +46 -0
- package/node_modules/@comis/agent/dist/model/model-registry-adapter.js +108 -0
- package/node_modules/@comis/agent/package.json +1 -1
- package/node_modules/@comis/channels/package.json +1 -1
- package/node_modules/@comis/cli/package.json +1 -1
- package/node_modules/@comis/core/dist/bootstrap.js +5 -0
- package/node_modules/@comis/core/dist/config/env-layer.d.ts +31 -0
- package/node_modules/@comis/core/dist/config/env-layer.js +41 -0
- package/node_modules/@comis/core/dist/config/layered.d.ts +9 -0
- package/node_modules/@comis/core/dist/config/layered.js +11 -0
- package/node_modules/@comis/core/package.json +1 -1
- package/node_modules/@comis/daemon/dist/daemon.js +3 -0
- package/node_modules/@comis/daemon/dist/wiring/setup-agents.js +15 -3
- 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/assets/{agent-detail-BG9MGWWj.js → agent-detail-ru-AhppM.js} +270 -270
- package/node_modules/@comis/web/dist/assets/agent-editor-hjwRuFVp.js +2173 -0
- package/node_modules/@comis/web/dist/assets/{agent-list-LHCJ4rw2.js → agent-list-6Uotjatr.js} +170 -170
- package/node_modules/@comis/web/dist/assets/{approvals-q9VH_IKr.js → approvals-C-K6hN2U.js} +13 -13
- package/node_modules/@comis/web/dist/assets/billing-view-CxysXH0p.js +375 -0
- package/node_modules/@comis/web/dist/assets/{channel-detail-CaInesJM.js → channel-detail-BBCKtmne.js} +265 -265
- package/node_modules/@comis/web/dist/assets/channel-list-FkfeOLBQ.js +323 -0
- package/node_modules/@comis/web/dist/assets/{chat-console-CNmzl0JW.js → chat-console-BumBaIgO.js} +243 -246
- package/node_modules/@comis/web/dist/assets/{config-editor-DX4ITw6y.js → config-editor-C9BSwHGy.js} +477 -477
- package/node_modules/@comis/web/dist/assets/{context-dag-browser-BwiaF5tf.js → context-dag-browser-BHm00mJD.js} +105 -105
- package/node_modules/@comis/web/dist/assets/{context-engine-BZ5Am6hA.js → context-engine-BENY3pWE.js} +136 -136
- package/node_modules/@comis/web/dist/assets/decorate-BvWYovGE.js +38 -0
- package/node_modules/@comis/web/dist/assets/{delivery-view-OfBZof-m.js → delivery-view-BCnkPsAp.js} +134 -134
- package/node_modules/@comis/web/dist/assets/{diagnostics-view-YFwCxgr2.js → diagnostics-view-C_jQFG2H.js} +82 -82
- package/node_modules/@comis/web/dist/assets/directive-BOYXJ-K-.js +1 -0
- package/node_modules/@comis/web/dist/assets/{extract-variables-BM5qyK-s.js → extract-variables-B7-Doo7l.js} +39 -39
- package/node_modules/@comis/web/dist/assets/{ic-array-editor-B7m6x7-S.js → ic-array-editor-BLoEyeLS.js} +29 -29
- package/node_modules/@comis/web/dist/assets/{ic-breadcrumb-CUMpp3BL.js → ic-breadcrumb-DqN6G3gc.js} +16 -16
- package/node_modules/@comis/web/dist/assets/{ic-budget-segment-bar-BtJ6x5mN.js → ic-budget-segment-bar-zLsMzjDO.js} +20 -20
- package/node_modules/@comis/web/dist/assets/ic-chat-message-FdQcZsSQ.js +352 -0
- package/node_modules/@comis/web/dist/assets/{ic-confirm-dialog-CCDbB04e.js → ic-confirm-dialog-DGlPbV1T.js} +26 -26
- package/node_modules/@comis/web/dist/assets/{ic-connection-dot-CnT1b8xr.js → ic-connection-dot-BgYiK2N4.js} +13 -13
- package/node_modules/@comis/web/dist/assets/ic-data-table-CKIvr-ag.js +277 -0
- package/node_modules/@comis/web/dist/assets/ic-delivery-row-B3YwjjuM.js +67 -0
- package/node_modules/@comis/web/dist/assets/{ic-detail-panel-BF83r-if.js → ic-detail-panel-DiCe4hLr.js} +27 -27
- package/node_modules/@comis/web/dist/assets/{ic-empty-state-60l2ePhd.js → ic-empty-state-CM3Wbj2f.js} +19 -19
- package/node_modules/@comis/web/dist/assets/ic-graph-canvas-ByRjij68.js +359 -0
- package/node_modules/@comis/web/dist/assets/ic-icon-BGNCCPpZ.js +33 -0
- package/node_modules/@comis/web/dist/assets/{ic-layer-waterfall-COvEYMg5.js → ic-layer-waterfall-WkaFyu-l.js} +18 -18
- package/node_modules/@comis/web/dist/assets/ic-relative-time-B3UAnTqg.js +12 -0
- package/node_modules/@comis/web/dist/assets/{ic-search-input-CSOxY9g7.js → ic-search-input-B02AGw1i.js} +22 -22
- package/node_modules/@comis/web/dist/assets/{ic-select-Ce-Raudx.js → ic-select-BqfZISjw.js} +29 -29
- package/node_modules/@comis/web/dist/assets/ic-tabs-yBjkWKJH.js +95 -0
- package/node_modules/@comis/web/dist/assets/ic-tag-CvMVQFRR.js +33 -0
- package/node_modules/@comis/web/dist/assets/{ic-time-range-picker-CypCT68y.js → ic-time-range-picker-DXbYeBmY.js} +31 -31
- package/node_modules/@comis/web/dist/assets/{ic-tool-call-7MaXSsCW.js → ic-tool-call-DMPHsLyx.js} +51 -51
- package/node_modules/@comis/web/dist/assets/index-CVEaS9aY.css +2 -0
- package/node_modules/@comis/web/dist/assets/index-FLPhHz8p.js +2792 -0
- package/node_modules/@comis/web/dist/assets/{mcp-management-BNZPnpDn.js → mcp-management-5jyScQis.js} +209 -209
- package/node_modules/@comis/web/dist/assets/{media-config-BBvTYxOX.js → media-config-J9oT9PPs.js} +154 -154
- package/node_modules/@comis/web/dist/assets/{media-test-BkK3RCRK.js → media-test-DGTCtM8-.js} +259 -259
- package/node_modules/@comis/web/dist/assets/{memory-inspector-1hDGCGat.js → memory-inspector-D5Re9ptG.js} +450 -450
- package/node_modules/@comis/web/dist/assets/{message-center-CXefwsUu.js → message-center-cRLK6ZmG.js} +290 -290
- package/node_modules/@comis/web/dist/assets/{models-C1qcU_j3.js → models-D5vu07MR.js} +371 -371
- package/node_modules/@comis/web/dist/assets/observability-types-D0tkwElU.js +1 -0
- package/node_modules/@comis/web/dist/assets/{observe-view-C0VBhX4C.js → observe-view-CalNNEmd.js} +399 -399
- package/node_modules/@comis/web/dist/assets/pipeline-builder-DUYDGwZf.js +1495 -0
- package/node_modules/@comis/web/dist/assets/{pipeline-history-DkfOQ6SW.js → pipeline-history-BAO8brOe.js} +124 -124
- package/node_modules/@comis/web/dist/assets/{pipeline-history-detail-hyHgD0ai.js → pipeline-history-detail-DectIoQt.js} +65 -65
- package/node_modules/@comis/web/dist/assets/{pipeline-list-BPW8hV-q.js → pipeline-list-BHlaBKww.js} +227 -227
- package/node_modules/@comis/web/dist/assets/{pipeline-monitor-Bip16T7e.js → pipeline-monitor-BhtpNEHf.js} +298 -298
- package/node_modules/@comis/web/dist/assets/{scheduler-BGgwKd06.js → scheduler-VafN_8xi.js} +486 -486
- package/node_modules/@comis/web/dist/assets/{security-D15st4xx.js → security-QQXMRTlo.js} +389 -389
- package/node_modules/@comis/web/dist/assets/{session-detail-SGEYNJ0M.js → session-detail-BpZ_8Yih.js} +294 -294
- package/node_modules/@comis/web/dist/assets/session-key-parser-Dkqcj2Ss.js +1 -0
- package/node_modules/@comis/web/dist/assets/session-list-DfCm8Cec.js +231 -0
- package/node_modules/@comis/web/dist/assets/{setup-wizard-nT0tz9QP.js → setup-wizard-C-z477CG.js} +486 -494
- package/node_modules/@comis/web/dist/assets/{skills-D8yVfSUy.js → skills-BCOGPf6s.js} +329 -329
- package/node_modules/@comis/web/dist/assets/{subagents-HHXMeHYo.js → subagents-l-auUraL.js} +74 -74
- package/node_modules/@comis/web/dist/assets/{workspace-manager-BQlr10iH.js → workspace-manager-DlvBixiq.js} +236 -236
- package/node_modules/@comis/web/dist/index.html +3 -2
- package/node_modules/@comis/web/package.json +1 -1
- package/package.json +15 -15
- package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +0 -2173
- package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +0 -375
- package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +0 -323
- package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +0 -1
- package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +0 -352
- package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +0 -277
- package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +0 -67
- package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +0 -359
- package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +0 -33
- package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +0 -12
- package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +0 -95
- package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +0 -33
- package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +0 -2830
- package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +0 -1
- package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +0 -1
- package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +0 -1496
- package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +0 -1
- package/node_modules/@comis/web/dist/assets/session-list-6ybUTxbY.js +0 -231
package/node_modules/@comis/web/dist/assets/{delivery-view-OfBZof-m.js → delivery-view-BCnkPsAp.js}
RENAMED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
import{
|
|
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`
|
|
1
|
+
import{c as e,f as t,h as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"./decorate-BvWYovGE.js";import"./index-FLPhHz8p.js";import"./ic-relative-time-B3UAnTqg.js";import"./ic-empty-state-CM3Wbj2f.js";import"./ic-time-range-picker-DXbYeBmY.js";import"./ic-detail-panel-DiCe4hLr.js";import"./ic-delivery-row-B3YwjjuM.js";function u(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${e}ms`}var d=class extends r{constructor(...e){super(...e),this.steps=[],this.totalDurationMs=0}static{this.styles=[o,n`
|
|
17
2
|
:host {
|
|
18
3
|
display: block;
|
|
19
4
|
}
|
|
@@ -80,125 +65,22 @@ 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"./ind
|
|
|
80
65
|
color: var(--ic-text-dim);
|
|
81
66
|
font-style: italic;
|
|
82
67
|
}
|
|
83
|
-
`]
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
`)}
|
|
68
|
+
`]}_getTotalDuration(){return this.totalDurationMs>0?this.totalDurationMs:this.steps.reduce((e,t)=>e+t.durationMs,0)}render(){if(this.steps.length===0)return t`<div class="empty">No trace steps available</div>`;let e=this._getTotalDuration(),n=0;return t`
|
|
69
|
+
${this.steps.map(r=>{let i=e>0?n/e*100:0,a=e>0?r.durationMs/e*100:0;return n+=r.durationMs,t`
|
|
70
|
+
<div class="step-row">
|
|
71
|
+
<span class="step-name" title="${r.name}">${r.name}</span>
|
|
72
|
+
<div class="track">
|
|
73
|
+
<div
|
|
74
|
+
class="fill fill--${r.status}"
|
|
75
|
+
style="left: ${i}%; width: ${a}%;"
|
|
76
|
+
title="${r.name}: ${u(r.durationMs)}"
|
|
77
|
+
></div>
|
|
114
78
|
</div>
|
|
115
|
-
|
|
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>
|
|
79
|
+
<span class="duration">${u(r.durationMs)}</span>
|
|
168
80
|
</div>
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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`
|
|
81
|
+
${r.error?t`<div class="error-text">${r.error}</div>`:``}
|
|
82
|
+
`})}
|
|
83
|
+
`}};c([s({attribute:!1})],d.prototype,`steps`,void 0),c([s({type:Number})],d.prototype,`totalDurationMs`,void 0),d=c([e(`ic-trace-timeline`)],d);var f=3e4,p=6048e5,m=class extends r{constructor(...e){super(...e),this.rpcClient=null,this._loadState=`loading`,this._sinceMs=p,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`)}static{this.styles=[o,i,n`
|
|
202
84
|
:host { display: block; }
|
|
203
85
|
|
|
204
86
|
.delivery-view { padding: 0; }
|
|
@@ -389,4 +271,122 @@ 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"./ind
|
|
|
389
271
|
}
|
|
390
272
|
|
|
391
273
|
.retry-btn:hover { background: var(--ic-surface-alt, #374151); }
|
|
392
|
-
`]
|
|
274
|
+
`]}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()},f))}async _loadData(){if(!this.rpcClient||this.rpcClient.status!==`connected`){this._loadState=`loaded`;return}let e=this.rpcClient;try{let[t,n]=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`&&n.status===`rejected`)throw t.reason;if(t.status===`fulfilled`){let e=t.value;this._deliveryStats={total:Number(e.totalDelivered??e.total??0),successes:Number(e.successes??Math.round(Number(e.totalDelivered??0)*Number(e.successRate??0)/100)),failures:Number(e.failed??e.failures??0),avgLatencyMs:Number(e.avgLatencyMs??0)}}if(n.status===`fulfilled`){let e=n.value;if(Array.isArray(e))this._traces=e.map(e=>this._normalizeTrace(e));else{let t=e,n=Array.isArray(t.traces)?t.traces:Array.isArray(t.deliveries)?t.deliveries:[];this._traces=n.map(e=>this._normalizeTrace(e))}}this._computeLatencyPercentiles(),this._loadState=`loaded`}catch{this._loadState=`error`}}_normalizeTrace(e){let t=String(e.traceId??`${e.sourceChannelId??`unknown`}-${e.deliveredAt??Date.now()}`),n=Number(e.timestamp??e.deliveredAt??Date.now()),r=String(e.sourceChannelType??e.targetChannelType??e.channelType??`unknown`),i=String(e.metadata?.messagePreview??(typeof e.message==`string`?e.message.slice(0,80):e.messagePreview??`...`)),a=e.status===`failed`?`failed`:e.status===`timeout`?`timeout`:typeof e.success==`boolean`?e.success?`success`:`failed`:`success`,o=e.latencyMs==null?null:Number(e.latencyMs),s=Array.isArray(e.steps)?e.steps:[];return{traceId:t,timestamp:n,channelType:r,messagePreview:i,status:a,latencyMs:o,stepCount:s.length,steps:s}}_computeLatencyPercentiles(){let e=this._traces.map(e=>e.latencyMs).filter(e=>e!=null).sort((e,t)=>e-t);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){let t=this._searchQuery.toLowerCase();e=e.filter(e=>e.messagePreview.toLowerCase().includes(t)||e.channelType.toLowerCase().includes(t))}return this._statusFilter!==`all`&&(e=e.filter(e=>e.status===this._statusFilter)),this._channelFilter!==`all`&&(e=e.filter(e=>e.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;let e=this._traces.filter(e=>e.status===`success`).length;return Math.round(e/this._traces.length*100)}get _channelRates(){let e=new Map;for(let t of this._traces){let n=e.get(t.channelType)??{ok:0,total:0};n.total++,t.status===`success`&&n.ok++,e.set(t.channelType,n)}return[...e.entries()].map(([e,t])=>({channel:e,rate:Math.round(t.ok/t.total*100)})).sort((e,t)=>e.channel.localeCompare(t.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){let t=this._traces.find(t=>t.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`--`;let n=t?`~`:``;return e>=1e3?`${n}${(e/1e3).toFixed(1)}s`:`${n}${e}ms`}_rateClass(e){return e>=95?`rate-good`:e>=90?`rate-warn`:`rate-bad`}_renderStats(){let e=this._successRate,n=this._latencyPercentiles,r=this._traces.length<10,i=this._deliveryStats?.total??this._traces.length;return t`
|
|
275
|
+
<div class="stats-row">
|
|
276
|
+
<ic-stat-card
|
|
277
|
+
label="Success Rate"
|
|
278
|
+
.value=${`${e}%`}
|
|
279
|
+
></ic-stat-card>
|
|
280
|
+
<ic-stat-card
|
|
281
|
+
label="P50 Latency"
|
|
282
|
+
.value=${n?this._formatLatency(n.p50,r):`--`}
|
|
283
|
+
></ic-stat-card>
|
|
284
|
+
<ic-stat-card
|
|
285
|
+
label="P95 Latency"
|
|
286
|
+
.value=${n?this._formatLatency(n.p95,r):`--`}
|
|
287
|
+
></ic-stat-card>
|
|
288
|
+
<ic-stat-card
|
|
289
|
+
label="P99 Latency"
|
|
290
|
+
.value=${n?this._formatLatency(n.p99,r):`--`}
|
|
291
|
+
></ic-stat-card>
|
|
292
|
+
<ic-stat-card
|
|
293
|
+
label="Total Deliveries"
|
|
294
|
+
.value=${this._fmtNum.format(i)}
|
|
295
|
+
></ic-stat-card>
|
|
296
|
+
</div>
|
|
297
|
+
${this._channelRates.length>1?t`
|
|
298
|
+
<div class="channel-rates">
|
|
299
|
+
${this._channelRates.map(e=>t`
|
|
300
|
+
<span class="channel-rate">
|
|
301
|
+
${e.channel}:
|
|
302
|
+
<span class="channel-rate-value ${this._rateClass(e.rate)}">${e.rate}%</span>
|
|
303
|
+
</span>
|
|
304
|
+
`)}
|
|
305
|
+
</div>
|
|
306
|
+
`:l}
|
|
307
|
+
`}_renderFilters(){let e=this._filteredTraces;return t`
|
|
308
|
+
<div class="filter-row">
|
|
309
|
+
<input
|
|
310
|
+
class="filter-input"
|
|
311
|
+
type="text"
|
|
312
|
+
placeholder="Search traces..."
|
|
313
|
+
.value=${this._searchQuery}
|
|
314
|
+
@input=${this._onSearchInput}
|
|
315
|
+
/>
|
|
316
|
+
<select class="filter-select" @change=${this._onStatusFilter}>
|
|
317
|
+
<option value="all">All Status</option>
|
|
318
|
+
<option value="success" ?selected=${this._statusFilter===`success`}>Success</option>
|
|
319
|
+
<option value="failed" ?selected=${this._statusFilter===`failed`}>Failed</option>
|
|
320
|
+
<option value="timeout" ?selected=${this._statusFilter===`timeout`}>Timeout</option>
|
|
321
|
+
</select>
|
|
322
|
+
<select class="filter-select" @change=${this._onChannelFilter}>
|
|
323
|
+
<option value="all">All Channels</option>
|
|
324
|
+
${this._uniqueChannels.map(e=>t`<option value=${e} ?selected=${this._channelFilter===e}>${e}</option>`)}
|
|
325
|
+
</select>
|
|
326
|
+
<span class="filter-count">Showing ${e.length} of ${this._traces.length} traces</span>
|
|
327
|
+
</div>
|
|
328
|
+
`}_renderTraceTable(){let e=this._filteredTraces;return e.length===0?t`<ic-empty-state icon="activity" message="No delivery traces match your filters"></ic-empty-state>`:t`
|
|
329
|
+
<div class="trace-table" role="table" aria-label="Delivery traces">
|
|
330
|
+
<div class="table-header" role="row">
|
|
331
|
+
<div class="cell" role="columnheader">Time</div>
|
|
332
|
+
<div class="cell" role="columnheader">Channel</div>
|
|
333
|
+
<div class="cell" role="columnheader">Message</div>
|
|
334
|
+
<div class="cell" role="columnheader">Status</div>
|
|
335
|
+
<div class="cell" role="columnheader">Latency</div>
|
|
336
|
+
<div class="cell" role="columnheader">Steps</div>
|
|
337
|
+
</div>
|
|
338
|
+
${e.map(e=>t`
|
|
339
|
+
<ic-delivery-row
|
|
340
|
+
.trace=${e}
|
|
341
|
+
@trace-click=${this._onTraceClick}
|
|
342
|
+
></ic-delivery-row>
|
|
343
|
+
`)}
|
|
344
|
+
</div>
|
|
345
|
+
`}_renderDetailDrawer(){let e=this._selectedTrace;if(!e)return l;let n=e.steps??[],r=new Date(e.timestamp).toLocaleString();return t`
|
|
346
|
+
<ic-detail-panel
|
|
347
|
+
?open=${this._detailOpen}
|
|
348
|
+
.panelTitle=${`Trace `+e.traceId.slice(0,16)}
|
|
349
|
+
@close=${this._closeDetail}
|
|
350
|
+
>
|
|
351
|
+
<div class="detail-cards">
|
|
352
|
+
<div class="detail-card">
|
|
353
|
+
<div class="detail-card-label">Channel</div>
|
|
354
|
+
<div class="detail-card-value">${e.channelType}</div>
|
|
355
|
+
</div>
|
|
356
|
+
<div class="detail-card">
|
|
357
|
+
<div class="detail-card-label">Status</div>
|
|
358
|
+
<div class="detail-card-value status-${e.status}">${e.status}</div>
|
|
359
|
+
</div>
|
|
360
|
+
<div class="detail-card">
|
|
361
|
+
<div class="detail-card-label">Latency</div>
|
|
362
|
+
<div class="detail-card-value">${this._formatLatency(e.latencyMs)}</div>
|
|
363
|
+
</div>
|
|
364
|
+
<div class="detail-card">
|
|
365
|
+
<div class="detail-card-label">Timestamp</div>
|
|
366
|
+
<div class="detail-card-value">${r}</div>
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
<div class="section-title">Execution Timeline</div>
|
|
371
|
+
${n.length>0?t`<ic-trace-timeline .steps=${n}></ic-trace-timeline>`:t`<p class="no-steps">No step details available</p>`}
|
|
372
|
+
</ic-detail-panel>
|
|
373
|
+
`}render(){return this._loadState===`loading`&&!this.rpcClient?t`<ic-skeleton-view variant="table"></ic-skeleton-view>`:this._loadState===`error`?t`
|
|
374
|
+
<div class="error-container">
|
|
375
|
+
<span class="error-message">Failed to load delivery data</span>
|
|
376
|
+
<button class="retry-btn" @click=${()=>this._tryLoad()}>Retry</button>
|
|
377
|
+
</div>
|
|
378
|
+
`:t`
|
|
379
|
+
<div class="delivery-view">
|
|
380
|
+
<div class="header">
|
|
381
|
+
<span class="header-title">Delivery</span>
|
|
382
|
+
<ic-time-range-picker
|
|
383
|
+
.selected=${this._selectedRange}
|
|
384
|
+
@time-range-change=${this._onTimeRangeChange}
|
|
385
|
+
></ic-time-range-picker>
|
|
386
|
+
</div>
|
|
387
|
+
${this._renderStats()}
|
|
388
|
+
${this._renderFilters()}
|
|
389
|
+
${this._renderTraceTable()}
|
|
390
|
+
${this._renderDetailDrawer()}
|
|
391
|
+
</div>
|
|
392
|
+
`}};c([s({attribute:!1})],m.prototype,`rpcClient`,void 0),c([a()],m.prototype,`_loadState`,void 0),c([a()],m.prototype,`_sinceMs`,void 0),c([a()],m.prototype,`_selectedRange`,void 0),c([a()],m.prototype,`_searchQuery`,void 0),c([a()],m.prototype,`_statusFilter`,void 0),c([a()],m.prototype,`_channelFilter`,void 0),c([a()],m.prototype,`_deliveryStats`,void 0),c([a()],m.prototype,`_traces`,void 0),c([a()],m.prototype,`_selectedTrace`,void 0),c([a()],m.prototype,`_detailOpen`,void 0),c([a()],m.prototype,`_latencyPercentiles`,void 0),m=c([e(`ic-delivery-view`)],m);export{m as IcDeliveryView};
|
|
@@ -1,84 +1,4 @@
|
|
|
1
|
-
import{
|
|
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`
|
|
1
|
+
import{c as e,f as t,h as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"./decorate-BvWYovGE.js";import{n as u,t as d}from"./observability-types-D0tkwElU.js";import{i as f}from"./index-FLPhHz8p.js";import"./ic-tag-CvMVQFRR.js";import"./ic-relative-time-B3UAnTqg.js";import"./ic-empty-state-CM3Wbj2f.js";import"./ic-time-range-picker-DXbYeBmY.js";var p=3e4,m=6048e5,h={info:`var(--ic-text-dim)`,warn:`var(--ic-warning)`,error:`var(--ic-error)`},g=class extends r{constructor(...e){super(...e),this.rpcClient=null,this.eventDispatcher=null,this._sse=null,this._reloadDebounce=null,this._loadState=`loading`,this._sinceMs=m,this._selectedRange=`7d`,this._events=[],this._selectedCategories=new Set,this._selectedSeverities=new Set,this._eventCounts={},this._refreshInterval=null,this._rpcStatusUnsub=null}static{this.styles=[o,i,n`
|
|
82
2
|
:host { display: block; }
|
|
83
3
|
|
|
84
4
|
.diagnostics-view { padding: 0; }
|
|
@@ -228,4 +148,84 @@ 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}fro
|
|
|
228
148
|
}
|
|
229
149
|
|
|
230
150
|
.retry-btn:hover { background: var(--ic-surface-alt, #374151); }
|
|
231
|
-
`]
|
|
151
|
+
`]}connectedCallback(){super.connectedCallback(),this._initSse()}_initSse(){!this.eventDispatcher||this._sse||(this._sse=new f(this,this.eventDispatcher,{"observability:reset":()=>{this._scheduleReload()}}))}_scheduleReload(e=300){this._reloadDebounce!==null&&clearTimeout(this._reloadDebounce),this._reloadDebounce=setTimeout(()=>{this._reloadDebounce=null,this._loadData()},e)}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(e){e.has(`rpcClient`)&&this.rpcClient&&this._tryLoad(),e.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(e=>{e===`connected`&&this._startLoading()})}_startLoading(){this._loadData(),this._refreshInterval===null&&(this._refreshInterval=setInterval(()=>{this._loadData()},p))}async _loadData(){if(!this.rpcClient||this.rpcClient.status!==`connected`){this._loadState=`loaded`;return}let e=this.rpcClient;try{let t=await e.call(`obs.diagnostics`,{sinceMs:this._sinceMs,limit:500});if(Array.isArray(t))this._events=t,this._eventCounts=this._computeCounts(t);else{let e=Array.isArray(t.events)?t.events:[];this._events=e,this._eventCounts=t.counts??this._computeCounts(e)}this._loadState=`loaded`}catch{this._loadState=`error`}}_computeCounts(e){let t={};for(let n of e)t[n.category]=(t[n.category]??0)+1;return t}get _filteredEvents(){let e=this._events;return this._selectedCategories.size>0&&(e=e.filter(e=>this._selectedCategories.has(e.category))),this._selectedSeverities.size>0&&(e=e.filter(e=>this._selectedSeverities.has(d(e)))),e.sort((e,t)=>t.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(e){this._sinceMs=e.detail.sinceMs,this._selectedRange=e.detail.label,this._loadData()}_onCategoryFilter(e){this._selectedCategories=e.detail.selected}_onSeverityFilter(e){this._selectedSeverities=e.detail.selected}_exportJsonl(){let e=this._filteredEvents;if(e.length===0)return;let t=e.map(e=>JSON.stringify(e)).join(`
|
|
152
|
+
`),n=new Blob([t],{type:`application/jsonl`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`diagnostics-${new Date().toISOString().slice(0,10)}.jsonl`,i.click(),URL.revokeObjectURL(r)}_renderFilters(){return t`
|
|
153
|
+
<div class="filter-section">
|
|
154
|
+
<div class="filter-group">
|
|
155
|
+
<span class="filter-label">Category</span>
|
|
156
|
+
<ic-filter-chips
|
|
157
|
+
.options=${this._categoryOptions}
|
|
158
|
+
.selected=${this._selectedCategories}
|
|
159
|
+
@filter-change=${this._onCategoryFilter}
|
|
160
|
+
></ic-filter-chips>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="filter-group">
|
|
163
|
+
<span class="filter-label">Severity</span>
|
|
164
|
+
<ic-filter-chips
|
|
165
|
+
.options=${this._severityOptions}
|
|
166
|
+
.selected=${this._selectedSeverities}
|
|
167
|
+
@filter-change=${this._onSeverityFilter}
|
|
168
|
+
></ic-filter-chips>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
`}_renderSummary(){return t`
|
|
172
|
+
<div class="summary-bar">
|
|
173
|
+
Showing ${this._filteredEvents.length} of ${this._events.length} events
|
|
174
|
+
</div>
|
|
175
|
+
`}_renderEventTable(){let e=this._filteredEvents;return e.length===0?t`<ic-empty-state icon="activity" message="No diagnostic events match your filters"></ic-empty-state>`:t`
|
|
176
|
+
<div class="event-table" role="table" aria-label="Diagnostic events">
|
|
177
|
+
<div class="table-header" role="row">
|
|
178
|
+
<div class="cell" role="columnheader">Timestamp</div>
|
|
179
|
+
<div class="cell" role="columnheader">Category</div>
|
|
180
|
+
<div class="cell" role="columnheader">Message</div>
|
|
181
|
+
<div class="cell" role="columnheader">Severity</div>
|
|
182
|
+
</div>
|
|
183
|
+
${e.map(e=>t`
|
|
184
|
+
<div class="event-row" role="row">
|
|
185
|
+
<div class="cell" role="cell">
|
|
186
|
+
<ic-relative-time .timestamp=${e.timestamp}></ic-relative-time>
|
|
187
|
+
</div>
|
|
188
|
+
<div class="cell" role="cell">
|
|
189
|
+
<ic-tag>${e.category}</ic-tag>
|
|
190
|
+
</div>
|
|
191
|
+
<div class="cell cell-message" role="cell" title=${u(e)}>
|
|
192
|
+
${u(e)}
|
|
193
|
+
</div>
|
|
194
|
+
<div class="cell" role="cell">
|
|
195
|
+
<ic-tag
|
|
196
|
+
style="--tag-color: ${h[d(e)]??`var(--ic-text-dim)`}"
|
|
197
|
+
>${d(e)}</ic-tag>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
`)}
|
|
201
|
+
</div>
|
|
202
|
+
`}render(){if(this._loadState===`loading`&&!this.rpcClient)return t`<ic-skeleton-view variant="table"></ic-skeleton-view>`;if(this._loadState===`error`)return t`
|
|
203
|
+
<div class="error-container">
|
|
204
|
+
<span class="error-message">Failed to load diagnostics data</span>
|
|
205
|
+
<button class="retry-btn" @click=${()=>this._tryLoad()}>Retry</button>
|
|
206
|
+
</div>
|
|
207
|
+
`;let e=this._filteredEvents;return t`
|
|
208
|
+
<div class="diagnostics-view">
|
|
209
|
+
<div class="header">
|
|
210
|
+
<div class="header-left">
|
|
211
|
+
<span class="header-title">Diagnostics</span>
|
|
212
|
+
</div>
|
|
213
|
+
<div class="header-right">
|
|
214
|
+
<button
|
|
215
|
+
class="export-btn"
|
|
216
|
+
?disabled=${e.length===0}
|
|
217
|
+
@click=${this._exportJsonl}
|
|
218
|
+
>
|
|
219
|
+
Export JSONL (${e.length} events)
|
|
220
|
+
</button>
|
|
221
|
+
<ic-time-range-picker
|
|
222
|
+
.selected=${this._selectedRange}
|
|
223
|
+
@time-range-change=${this._onTimeRangeChange}
|
|
224
|
+
></ic-time-range-picker>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
${this._events.length>0?this._renderFilters():l}
|
|
228
|
+
${this._renderSummary()}
|
|
229
|
+
${this._renderEventTable()}
|
|
230
|
+
</div>
|
|
231
|
+
`}};c([s({attribute:!1})],g.prototype,`rpcClient`,void 0),c([s({attribute:!1})],g.prototype,`eventDispatcher`,void 0),c([a()],g.prototype,`_loadState`,void 0),c([a()],g.prototype,`_sinceMs`,void 0),c([a()],g.prototype,`_selectedRange`,void 0),c([a()],g.prototype,`_events`,void 0),c([a()],g.prototype,`_selectedCategories`,void 0),c([a()],g.prototype,`_selectedSeverities`,void 0),c([a()],g.prototype,`_eventCounts`,void 0),g=c([e(`ic-diagnostics-view`)],g);export{g as IcDiagnosticsView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},t=e=>(...t)=>({_$litDirective$:e,values:t}),n=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}};export{n,e as r,t};
|
|
@@ -1,41 +1,4 @@
|
|
|
1
|
-
import{
|
|
2
|
-
<div
|
|
3
|
-
class="backdrop"
|
|
4
|
-
@click=${this._onBackdropClick}
|
|
5
|
-
@keydown=${this._onKeyDown}
|
|
6
|
-
>
|
|
7
|
-
<div
|
|
8
|
-
class="dialog"
|
|
9
|
-
role="dialog"
|
|
10
|
-
aria-modal="true"
|
|
11
|
-
aria-labelledby="variable-prompt-title"
|
|
12
|
-
>
|
|
13
|
-
<h2 class="title" id="variable-prompt-title">${t}</h2>
|
|
14
|
-
${this.variables.map(e=>u`
|
|
15
|
-
<div class="field">
|
|
16
|
-
<label class="field-label">${e}</label>
|
|
17
|
-
<input
|
|
18
|
-
class="field-input"
|
|
19
|
-
type="text"
|
|
20
|
-
placeholder="Enter value..."
|
|
21
|
-
.value=${this._values[e]??""}
|
|
22
|
-
@input=${i=>this._onInput(e,i)}
|
|
23
|
-
/>
|
|
24
|
-
</div>
|
|
25
|
-
`)}
|
|
26
|
-
<div class="buttons">
|
|
27
|
-
<button class="cancel-btn" @click=${this._fireCancel}>Cancel</button>
|
|
28
|
-
<button
|
|
29
|
-
class="run-btn"
|
|
30
|
-
?disabled=${!this._allFilled}
|
|
31
|
-
@click=${this._fireConfirm}
|
|
32
|
-
>
|
|
33
|
-
Run
|
|
34
|
-
</button>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
`}};s.styles=[p,v,f`
|
|
1
|
+
import{c as e,f as t,h as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"./decorate-BvWYovGE.js";var u=class extends r{constructor(...e){super(...e),this.open=!1,this.variables=[],this.pipelineLabel=``,this._values={},this._onKeyDown=e=>{if(e.key===`Escape`){e.preventDefault(),this._fireCancel();return}if(e.key===`Tab`){let t=this.shadowRoot?.querySelectorAll(`input:not([disabled]), button:not([disabled])`);if(!t||t.length===0)return;let n=t[0],r=t[t.length-1],i=this.shadowRoot?.activeElement;e.shiftKey&&i===n?(e.preventDefault(),r.focus()):!e.shiftKey&&i===r&&(e.preventDefault(),n.focus())}}}static{this.styles=[o,i,n`
|
|
39
2
|
:host {
|
|
40
3
|
display: contents;
|
|
41
4
|
}
|
|
@@ -146,4 +109,41 @@ import{s as p,f as v,i as f,n as d,r as b,a as h,A as m,b as u,t as g}from"./ind
|
|
|
146
109
|
.run-btn:disabled:hover {
|
|
147
110
|
background: var(--ic-accent);
|
|
148
111
|
}
|
|
149
|
-
`]
|
|
112
|
+
`]}updated(e){if(e.has(`open`)&&this.open){this._values={};for(let e of this.variables)this._values[e]=``;this.updateComplete.then(()=>{(this.shadowRoot?.querySelector(`.field-input`))?.focus()})}}_onBackdropClick(e){e.target.classList.contains(`backdrop`)&&this._fireCancel()}_onInput(e,t){let n=t.target.value;this._values={...this._values,[e]:n}}_fireConfirm(){let e={};for(let[t,n]of Object.entries(this._values))e[t]=n.trim();this.dispatchEvent(new CustomEvent(`confirm`,{detail:{values:e}}))}_fireCancel(){this.dispatchEvent(new CustomEvent(`cancel`))}get _allFilled(){return this.variables.every(e=>(this._values[e]??``).trim().length>0)}render(){if(!this.open)return l;let e=this.pipelineLabel?`Run: ${this.pipelineLabel}`:`Run Pipeline`;return t`
|
|
113
|
+
<div
|
|
114
|
+
class="backdrop"
|
|
115
|
+
@click=${this._onBackdropClick}
|
|
116
|
+
@keydown=${this._onKeyDown}
|
|
117
|
+
>
|
|
118
|
+
<div
|
|
119
|
+
class="dialog"
|
|
120
|
+
role="dialog"
|
|
121
|
+
aria-modal="true"
|
|
122
|
+
aria-labelledby="variable-prompt-title"
|
|
123
|
+
>
|
|
124
|
+
<h2 class="title" id="variable-prompt-title">${e}</h2>
|
|
125
|
+
${this.variables.map(e=>t`
|
|
126
|
+
<div class="field">
|
|
127
|
+
<label class="field-label">${e}</label>
|
|
128
|
+
<input
|
|
129
|
+
class="field-input"
|
|
130
|
+
type="text"
|
|
131
|
+
placeholder="Enter value..."
|
|
132
|
+
.value=${this._values[e]??``}
|
|
133
|
+
@input=${t=>this._onInput(e,t)}
|
|
134
|
+
/>
|
|
135
|
+
</div>
|
|
136
|
+
`)}
|
|
137
|
+
<div class="buttons">
|
|
138
|
+
<button class="cancel-btn" @click=${this._fireCancel}>Cancel</button>
|
|
139
|
+
<button
|
|
140
|
+
class="run-btn"
|
|
141
|
+
?disabled=${!this._allFilled}
|
|
142
|
+
@click=${this._fireConfirm}
|
|
143
|
+
>
|
|
144
|
+
Run
|
|
145
|
+
</button>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
`}};c([s({type:Boolean,reflect:!0})],u.prototype,`open`,void 0),c([s({type:Array})],u.prototype,`variables`,void 0),c([s()],u.prototype,`pipelineLabel`,void 0),c([a()],u.prototype,`_values`,void 0),u=c([e(`ic-variable-prompt`)],u);var d=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;function f(e){let t=new Set;for(let n of e){let e;for(d.lastIndex=0;(e=d.exec(n))!==null;)t.add(e[1])}return[...t].sort()}function p(e,t){return e.replace(d,(e,n)=>n in t?t[n]:e)}export{p as n,f as t};
|