comisai 1.0.24 → 1.0.26

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.
Files changed (192) hide show
  1. package/node_modules/@comis/agent/dist/bootstrap/sections/tool-descriptions.js +130 -10
  2. package/node_modules/@comis/agent/dist/bootstrap/sections/tooling-sections.d.ts +1 -1
  3. package/node_modules/@comis/agent/dist/bootstrap/sections/tooling-sections.js +9 -2
  4. package/node_modules/@comis/agent/dist/bridge/bridge-metrics.d.ts +8 -0
  5. package/node_modules/@comis/agent/dist/bridge/bridge-metrics.js +2 -0
  6. package/node_modules/@comis/agent/dist/bridge/pi-event-bridge.d.ts +29 -0
  7. package/node_modules/@comis/agent/dist/bridge/pi-event-bridge.js +242 -2
  8. package/node_modules/@comis/agent/dist/bridge/thinking-block-hash-invariant.d.ts +210 -0
  9. package/node_modules/@comis/agent/dist/bridge/thinking-block-hash-invariant.js +566 -0
  10. package/node_modules/@comis/agent/dist/context-engine/context-engine.js +8 -6
  11. package/node_modules/@comis/agent/dist/context-engine/signature-replay-scrubber.d.ts +51 -30
  12. package/node_modules/@comis/agent/dist/context-engine/signature-replay-scrubber.js +109 -36
  13. package/node_modules/@comis/agent/dist/executor/executor-context-engine-setup.js +5 -1
  14. package/node_modules/@comis/agent/dist/executor/executor-post-execution.js +22 -20
  15. package/node_modules/@comis/agent/dist/executor/executor-prompt-runner.d.ts +2 -0
  16. package/node_modules/@comis/agent/dist/executor/executor-prompt-runner.js +111 -15
  17. package/node_modules/@comis/agent/dist/executor/executor-response-filter.d.ts +20 -17
  18. package/node_modules/@comis/agent/dist/executor/executor-response-filter.js +132 -52
  19. package/node_modules/@comis/agent/dist/executor/executor-tool-assembly.js +16 -3
  20. package/node_modules/@comis/agent/dist/executor/model-retry.d.ts +14 -0
  21. package/node_modules/@comis/agent/dist/executor/model-retry.js +72 -1
  22. package/node_modules/@comis/agent/dist/executor/pi-executor.d.ts +3 -0
  23. package/node_modules/@comis/agent/dist/executor/pi-executor.js +68 -9
  24. package/node_modules/@comis/agent/dist/executor/post-batch-continuation.d.ts +82 -0
  25. package/node_modules/@comis/agent/dist/executor/post-batch-continuation.js +200 -0
  26. package/node_modules/@comis/agent/dist/executor/stream-wrappers/request-body-injector.js +1 -9
  27. package/node_modules/@comis/agent/dist/executor/tool-deferral.d.ts +37 -2
  28. package/node_modules/@comis/agent/dist/executor/tool-deferral.js +45 -3
  29. package/node_modules/@comis/agent/dist/executor/tool-parallelism.js +0 -1
  30. package/node_modules/@comis/agent/dist/executor/types.d.ts +11 -2
  31. package/node_modules/@comis/agent/dist/index.d.ts +3 -1
  32. package/node_modules/@comis/agent/dist/index.js +2 -0
  33. package/node_modules/@comis/agent/dist/model/last-known-model.d.ts +36 -0
  34. package/node_modules/@comis/agent/dist/model/last-known-model.js +49 -0
  35. package/node_modules/@comis/agent/dist/model/model-registry-adapter.d.ts +16 -4
  36. package/node_modules/@comis/agent/dist/model/model-registry-adapter.js +65 -21
  37. package/node_modules/@comis/agent/dist/planner/types.d.ts +0 -2
  38. package/node_modules/@comis/agent/dist/session/comis-session-manager.d.ts +10 -0
  39. package/node_modules/@comis/agent/dist/session/comis-session-manager.js +5 -0
  40. package/node_modules/@comis/agent/dist/spawn/pi-mono-adapters.js +7 -0
  41. package/node_modules/@comis/agent/package.json +1 -1
  42. package/node_modules/@comis/channels/package.json +1 -1
  43. package/node_modules/@comis/cli/dist/client/rpc-client.js +6 -1
  44. package/node_modules/@comis/cli/dist/commands/doctor.js +5 -3
  45. package/node_modules/@comis/cli/dist/commands/health.js +5 -2
  46. package/node_modules/@comis/cli/dist/wizard/json-output.js +7 -3
  47. package/node_modules/@comis/cli/dist/wizard/steps/11-daemon-start.js +130 -0
  48. package/node_modules/@comis/cli/package.json +1 -1
  49. package/node_modules/@comis/core/dist/bootstrap.js +5 -0
  50. package/node_modules/@comis/core/dist/config/env-layer.d.ts +31 -0
  51. package/node_modules/@comis/core/dist/config/env-layer.js +41 -0
  52. package/node_modules/@comis/core/dist/config/immutable-keys.d.ts +2 -2
  53. package/node_modules/@comis/core/dist/config/immutable-keys.js +8 -3
  54. package/node_modules/@comis/core/dist/config/layered.d.ts +9 -0
  55. package/node_modules/@comis/core/dist/config/layered.js +11 -0
  56. package/node_modules/@comis/core/dist/config/managed-sections.d.ts +43 -4
  57. package/node_modules/@comis/core/dist/config/managed-sections.js +100 -6
  58. package/node_modules/@comis/core/dist/config/schema-agent.d.ts +39 -0
  59. package/node_modules/@comis/core/dist/config/schema-agent.js +14 -0
  60. package/node_modules/@comis/core/dist/config/schema.d.ts +4 -0
  61. package/node_modules/@comis/core/dist/config/schema.js +14 -0
  62. package/node_modules/@comis/core/dist/domain/execution-graph.d.ts +1 -1
  63. package/node_modules/@comis/core/dist/event-bus/events-agent.d.ts +17 -2
  64. package/node_modules/@comis/core/dist/exports/config.d.ts +2 -2
  65. package/node_modules/@comis/core/dist/exports/config.js +1 -1
  66. package/node_modules/@comis/core/package.json +1 -1
  67. package/node_modules/@comis/daemon/dist/daemon.d.ts +22 -0
  68. package/node_modules/@comis/daemon/dist/daemon.js +45 -0
  69. package/node_modules/@comis/daemon/dist/rpc/agent-handlers.d.ts +5 -2
  70. package/node_modules/@comis/daemon/dist/rpc/agent-handlers.js +80 -1
  71. package/node_modules/@comis/daemon/dist/rpc/agent-inline-workspace.d.ts +67 -0
  72. package/node_modules/@comis/daemon/dist/rpc/agent-inline-workspace.js +139 -0
  73. package/node_modules/@comis/daemon/dist/rpc/model-handlers.d.ts +3 -0
  74. package/node_modules/@comis/daemon/dist/rpc/model-handlers.js +29 -5
  75. package/node_modules/@comis/daemon/dist/rpc/probe-provider-auth.d.ts +30 -0
  76. package/node_modules/@comis/daemon/dist/rpc/probe-provider-auth.js +59 -0
  77. package/node_modules/@comis/daemon/dist/rpc/provider-handlers.d.ts +37 -0
  78. package/node_modules/@comis/daemon/dist/rpc/provider-handlers.js +330 -0
  79. package/node_modules/@comis/daemon/dist/rpc/rpc-dispatch.js +18 -1
  80. package/node_modules/@comis/daemon/dist/setup-docker-restart-warn.d.ts +4 -0
  81. package/node_modules/@comis/daemon/dist/setup-docker-restart-warn.js +30 -0
  82. package/node_modules/@comis/daemon/dist/wiring/setup-agents.d.ts +3 -1
  83. package/node_modules/@comis/daemon/dist/wiring/setup-agents.js +28 -2
  84. package/node_modules/@comis/daemon/dist/wiring/setup-cross-session.js +1 -0
  85. package/node_modules/@comis/daemon/dist/wiring/setup-tools.js +7 -4
  86. package/node_modules/@comis/daemon/package.json +1 -1
  87. package/node_modules/@comis/gateway/package.json +1 -1
  88. package/node_modules/@comis/infra/dist/index.d.ts +1 -0
  89. package/node_modules/@comis/infra/dist/index.js +2 -0
  90. package/node_modules/@comis/infra/dist/runtime/is-docker.d.ts +1 -0
  91. package/node_modules/@comis/infra/dist/runtime/is-docker.js +25 -0
  92. package/node_modules/@comis/infra/package.json +1 -1
  93. package/node_modules/@comis/memory/package.json +1 -1
  94. package/node_modules/@comis/scheduler/package.json +1 -1
  95. package/node_modules/@comis/shared/package.json +1 -1
  96. package/node_modules/@comis/skills/dist/bridge/tool-metadata-registry.js +1 -3
  97. package/node_modules/@comis/skills/dist/builtin/platform/admin-manage-factory.js +24 -1
  98. package/node_modules/@comis/skills/dist/builtin/platform/agents-manage-tool.d.ts +53 -7
  99. package/node_modules/@comis/skills/dist/builtin/platform/agents-manage-tool.js +218 -24
  100. package/node_modules/@comis/skills/dist/builtin/platform/gateway-tool.d.ts +4 -1
  101. package/node_modules/@comis/skills/dist/builtin/platform/gateway-tool.js +16 -1
  102. package/node_modules/@comis/skills/dist/builtin/platform/index.d.ts +1 -1
  103. package/node_modules/@comis/skills/dist/builtin/platform/index.js +1 -1
  104. package/node_modules/@comis/skills/dist/builtin/platform/providers-manage-tool.d.ts +56 -0
  105. package/node_modules/@comis/skills/dist/builtin/platform/providers-manage-tool.js +203 -0
  106. package/node_modules/@comis/skills/dist/index.d.ts +1 -1
  107. package/node_modules/@comis/skills/dist/index.js +2 -2
  108. package/node_modules/@comis/skills/dist/policy/tool-policy.js +0 -1
  109. package/node_modules/@comis/skills/package.json +1 -1
  110. package/node_modules/@comis/web/dist/assets/{agent-detail-BG9MGWWj.js → agent-detail-DqL6Artv.js} +270 -270
  111. package/node_modules/@comis/web/dist/assets/agent-editor-CNM_h94Y.js +2173 -0
  112. package/node_modules/@comis/web/dist/assets/{agent-list-LHCJ4rw2.js → agent-list-Dbh-xD_F.js} +170 -170
  113. package/node_modules/@comis/web/dist/assets/{approvals-q9VH_IKr.js → approvals-C-K6hN2U.js} +13 -13
  114. package/node_modules/@comis/web/dist/assets/billing-view-C1DmtyzK.js +375 -0
  115. package/node_modules/@comis/web/dist/assets/{channel-detail-CaInesJM.js → channel-detail-CtCH22N1.js} +265 -265
  116. package/node_modules/@comis/web/dist/assets/channel-list-C7xXn-60.js +323 -0
  117. package/node_modules/@comis/web/dist/assets/{chat-console-CNmzl0JW.js → chat-console-C51pjFwk.js} +243 -246
  118. package/node_modules/@comis/web/dist/assets/{config-editor-DX4ITw6y.js → config-editor-BLArYRB7.js} +477 -477
  119. package/node_modules/@comis/web/dist/assets/{context-dag-browser-BwiaF5tf.js → context-dag-browser-fuyMinNI.js} +105 -105
  120. package/node_modules/@comis/web/dist/assets/{context-engine-BZ5Am6hA.js → context-engine-Bngf2bH0.js} +136 -136
  121. package/node_modules/@comis/web/dist/assets/decorate-BvWYovGE.js +38 -0
  122. package/node_modules/@comis/web/dist/assets/{delivery-view-OfBZof-m.js → delivery-view-C80hucxX.js} +134 -134
  123. package/node_modules/@comis/web/dist/assets/{diagnostics-view-YFwCxgr2.js → diagnostics-view-Cl4VbHZ6.js} +82 -82
  124. package/node_modules/@comis/web/dist/assets/directive-BOYXJ-K-.js +1 -0
  125. package/node_modules/@comis/web/dist/assets/{extract-variables-BM5qyK-s.js → extract-variables-B7-Doo7l.js} +39 -39
  126. package/node_modules/@comis/web/dist/assets/{ic-array-editor-B7m6x7-S.js → ic-array-editor-BLoEyeLS.js} +29 -29
  127. package/node_modules/@comis/web/dist/assets/{ic-breadcrumb-CUMpp3BL.js → ic-breadcrumb-DqN6G3gc.js} +16 -16
  128. package/node_modules/@comis/web/dist/assets/{ic-budget-segment-bar-BtJ6x5mN.js → ic-budget-segment-bar-zLsMzjDO.js} +20 -20
  129. package/node_modules/@comis/web/dist/assets/ic-chat-message-ByFUoMm6.js +352 -0
  130. package/node_modules/@comis/web/dist/assets/{ic-confirm-dialog-CCDbB04e.js → ic-confirm-dialog-DGlPbV1T.js} +26 -26
  131. package/node_modules/@comis/web/dist/assets/{ic-connection-dot-CnT1b8xr.js → ic-connection-dot-C4nDHgY2.js} +13 -13
  132. package/node_modules/@comis/web/dist/assets/ic-data-table-CKIvr-ag.js +277 -0
  133. package/node_modules/@comis/web/dist/assets/ic-delivery-row-B3YwjjuM.js +67 -0
  134. package/node_modules/@comis/web/dist/assets/{ic-detail-panel-BF83r-if.js → ic-detail-panel-DiCe4hLr.js} +27 -27
  135. package/node_modules/@comis/web/dist/assets/{ic-empty-state-60l2ePhd.js → ic-empty-state-CM3Wbj2f.js} +19 -19
  136. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-ByRjij68.js +359 -0
  137. package/node_modules/@comis/web/dist/assets/ic-icon-BGNCCPpZ.js +33 -0
  138. package/node_modules/@comis/web/dist/assets/{ic-layer-waterfall-COvEYMg5.js → ic-layer-waterfall-WkaFyu-l.js} +18 -18
  139. package/node_modules/@comis/web/dist/assets/ic-relative-time-B3UAnTqg.js +12 -0
  140. package/node_modules/@comis/web/dist/assets/{ic-search-input-CSOxY9g7.js → ic-search-input-B02AGw1i.js} +22 -22
  141. package/node_modules/@comis/web/dist/assets/{ic-select-Ce-Raudx.js → ic-select-BqfZISjw.js} +29 -29
  142. package/node_modules/@comis/web/dist/assets/ic-tabs-yBjkWKJH.js +95 -0
  143. package/node_modules/@comis/web/dist/assets/ic-tag-CvMVQFRR.js +33 -0
  144. package/node_modules/@comis/web/dist/assets/{ic-time-range-picker-CypCT68y.js → ic-time-range-picker-DXbYeBmY.js} +31 -31
  145. package/node_modules/@comis/web/dist/assets/{ic-tool-call-7MaXSsCW.js → ic-tool-call-Bh5kq-yY.js} +51 -51
  146. package/node_modules/@comis/web/dist/assets/index-BBkuC-EU.js +2792 -0
  147. package/node_modules/@comis/web/dist/assets/index-CVEaS9aY.css +2 -0
  148. package/node_modules/@comis/web/dist/assets/{mcp-management-BNZPnpDn.js → mcp-management-DB-phOo7.js} +209 -209
  149. package/node_modules/@comis/web/dist/assets/{media-config-BBvTYxOX.js → media-config-CRqZ1ZUH.js} +154 -154
  150. package/node_modules/@comis/web/dist/assets/{media-test-BkK3RCRK.js → media-test-C9vE20Oy.js} +259 -259
  151. package/node_modules/@comis/web/dist/assets/{memory-inspector-1hDGCGat.js → memory-inspector-CeqfnxMZ.js} +450 -450
  152. package/node_modules/@comis/web/dist/assets/{message-center-CXefwsUu.js → message-center-Daup7Mof.js} +290 -290
  153. package/node_modules/@comis/web/dist/assets/{models-C1qcU_j3.js → models-DLYnEU8E.js} +371 -371
  154. package/node_modules/@comis/web/dist/assets/observability-types-D0tkwElU.js +1 -0
  155. package/node_modules/@comis/web/dist/assets/{observe-view-C0VBhX4C.js → observe-view-BTSt_PO5.js} +399 -399
  156. package/node_modules/@comis/web/dist/assets/pipeline-builder-DknfzyLt.js +1495 -0
  157. package/node_modules/@comis/web/dist/assets/{pipeline-history-DkfOQ6SW.js → pipeline-history-JnHZdeU_.js} +124 -124
  158. package/node_modules/@comis/web/dist/assets/{pipeline-history-detail-hyHgD0ai.js → pipeline-history-detail-Dg4knsEb.js} +65 -65
  159. package/node_modules/@comis/web/dist/assets/{pipeline-list-BPW8hV-q.js → pipeline-list-AEnibjsp.js} +227 -227
  160. package/node_modules/@comis/web/dist/assets/{pipeline-monitor-Bip16T7e.js → pipeline-monitor-DG7RbIOO.js} +298 -298
  161. package/node_modules/@comis/web/dist/assets/{scheduler-BGgwKd06.js → scheduler-uL1fYKAT.js} +486 -486
  162. package/node_modules/@comis/web/dist/assets/{security-D15st4xx.js → security-C3DywRLH.js} +389 -389
  163. package/node_modules/@comis/web/dist/assets/{session-detail-SGEYNJ0M.js → session-detail-BtqCNWXV.js} +294 -294
  164. package/node_modules/@comis/web/dist/assets/session-key-parser-Dkqcj2Ss.js +1 -0
  165. package/node_modules/@comis/web/dist/assets/session-list-CJXWa2XT.js +231 -0
  166. package/node_modules/@comis/web/dist/assets/{setup-wizard-nT0tz9QP.js → setup-wizard-ywn7oJvu.js} +486 -494
  167. package/node_modules/@comis/web/dist/assets/{skills-D8yVfSUy.js → skills-DX0KYnWD.js} +329 -329
  168. package/node_modules/@comis/web/dist/assets/{subagents-HHXMeHYo.js → subagents-B8p5YJEB.js} +74 -74
  169. package/node_modules/@comis/web/dist/assets/{workspace-manager-BQlr10iH.js → workspace-manager-CgzNIrw1.js} +236 -236
  170. package/node_modules/@comis/web/dist/index.html +3 -2
  171. package/node_modules/@comis/web/package.json +1 -1
  172. package/package.json +15 -15
  173. package/node_modules/@comis/skills/dist/builtin/platform/agents-list-tool.d.ts +0 -19
  174. package/node_modules/@comis/skills/dist/builtin/platform/agents-list-tool.js +0 -39
  175. package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +0 -2173
  176. package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +0 -375
  177. package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +0 -323
  178. package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +0 -1
  179. package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +0 -352
  180. package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +0 -277
  181. package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +0 -67
  182. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +0 -359
  183. package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +0 -33
  184. package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +0 -12
  185. package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +0 -95
  186. package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +0 -33
  187. package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +0 -2830
  188. package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +0 -1
  189. package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +0 -1
  190. package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +0 -1496
  191. package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +0 -1
  192. package/node_modules/@comis/web/dist/assets/session-list-6ybUTxbY.js +0 -231
@@ -1,19 +1,4 @@
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`
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-BBkuC-EU.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
- `];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
- `)}
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
- `: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>
79
+ <span class="duration">${u(r.durationMs)}</span>
168
80
  </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`
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
- `];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};
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{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`
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-BBkuC-EU.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
- `];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};
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{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"./index-CEcM1R_C.js";var x=Object.defineProperty,y=Object.getOwnPropertyDescriptor,o=(t,e,i,a)=>{for(var r=a>1?void 0:a?y(e,i):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(r=(a?l(e,i,r):l(r))||r);return a&&r&&x(e,i,r),r};let s=class extends h{constructor(){super(...arguments),this.open=!1,this.variables=[],this.pipelineLabel="",this._values={},this._onKeyDown=t=>{if(t.key==="Escape"){t.preventDefault(),this._fireCancel();return}if(t.key==="Tab"){const e=this.shadowRoot?.querySelectorAll("input:not([disabled]), button:not([disabled])");if(!e||e.length===0)return;const i=e[0],a=e[e.length-1],r=this.shadowRoot?.activeElement;t.shiftKey&&r===i?(t.preventDefault(),a.focus()):!t.shiftKey&&r===a&&(t.preventDefault(),i.focus())}}}updated(t){if(t.has("open")&&this.open){this._values={};for(const e of this.variables)this._values[e]="";this.updateComplete.then(()=>{this.shadowRoot?.querySelector(".field-input")?.focus()})}}_onBackdropClick(t){t.target.classList.contains("backdrop")&&this._fireCancel()}_onInput(t,e){const i=e.target.value;this._values={...this._values,[t]:i}}_fireConfirm(){const t={};for(const[e,i]of Object.entries(this._values))t[e]=i.trim();this.dispatchEvent(new CustomEvent("confirm",{detail:{values:t}}))}_fireCancel(){this.dispatchEvent(new CustomEvent("cancel"))}get _allFilled(){return this.variables.every(t=>(this._values[t]??"").trim().length>0)}render(){if(!this.open)return m;const t=this.pipelineLabel?`Run: ${this.pipelineLabel}`:"Run Pipeline";return u`
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
- `];o([d({type:Boolean,reflect:!0})],s.prototype,"open",2);o([d({type:Array})],s.prototype,"variables",2);o([d()],s.prototype,"pipelineLabel",2);o([b()],s.prototype,"_values",2);s=o([g("ic-variable-prompt")],s);const c=/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;function w(t){const e=new Set;for(const i of t){let a;for(c.lastIndex=0;(a=c.exec(i))!==null;)e.add(a[1])}return[...e].sort()}function k(t,e){return t.replace(c,(i,a)=>a in e?e[a]:i)}export{w as e,k as s};
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};