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
@@ -0,0 +1,375 @@
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{i as u}from"./index-BBkuC-EU.js";import"./ic-empty-state-CM3Wbj2f.js";import"./ic-time-range-picker-DXbYeBmY.js";var d=class extends r{constructor(...e){super(...e),this.segments=[],this.total=0,this.currency=`$`}static{this.styles=[o,n`
2
+ :host {
3
+ display: block;
4
+ }
5
+
6
+ .bar {
7
+ display: flex;
8
+ height: 20px;
9
+ border-radius: var(--ic-radius-sm, 4px);
10
+ overflow: hidden;
11
+ }
12
+
13
+ .segment {
14
+ min-width: 2px;
15
+ height: 100%;
16
+ cursor: pointer;
17
+ transition: filter 0.15s;
18
+ }
19
+
20
+ .segment:hover {
21
+ filter: brightness(1.2);
22
+ }
23
+
24
+ .legend {
25
+ display: flex;
26
+ flex-wrap: wrap;
27
+ gap: var(--ic-space-sm);
28
+ margin-top: var(--ic-space-sm);
29
+ }
30
+
31
+ .legend-item {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: 4px;
35
+ font-size: var(--ic-text-xs);
36
+ color: var(--ic-text-dim);
37
+ }
38
+
39
+ .legend-dot {
40
+ width: 8px;
41
+ height: 8px;
42
+ border-radius: 50%;
43
+ flex-shrink: 0;
44
+ }
45
+
46
+ .empty {
47
+ font-size: var(--ic-text-sm);
48
+ color: var(--ic-text-dim);
49
+ font-style: italic;
50
+ }
51
+ `]}_getTotal(){return this.total>0?this.total:this.segments.reduce((e,t)=>e+t.value,0)}_formatValue(e){return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:this.currency===`$`?`USD`:this.currency,minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}_onSegmentClick(e){this.dispatchEvent(new CustomEvent(`segment-click`,{detail:{label:e.label,value:e.value},bubbles:!0,composed:!0}))}render(){let e=this._getTotal();return e===0||this.segments.length===0?t`<div class="empty">No cost data available</div>`:t`
52
+ <div class="bar" role="img" aria-label="Cost breakdown">
53
+ ${this.segments.map(n=>{let r=n.value/e*100;return t`
54
+ <div
55
+ class="segment"
56
+ style="width: ${r}%; background: ${n.color};"
57
+ title="${n.label}: ${this._formatValue(n.value)} (${r.toFixed(1)}%)"
58
+ @click=${()=>this._onSegmentClick(n)}
59
+ ></div>
60
+ `})}
61
+ </div>
62
+ <div class="legend">
63
+ ${this.segments.map(e=>t`
64
+ <span class="legend-item">
65
+ <span class="legend-dot" style="background: ${e.color};"></span>
66
+ ${e.label}: ${this._formatValue(e.value)}
67
+ </span>
68
+ `)}
69
+ </div>
70
+ `}};c([s({attribute:!1})],d.prototype,`segments`,void 0),c([s({type:Number})],d.prototype,`total`,void 0),c([s({type:String})],d.prototype,`currency`,void 0),d=c([e(`ic-cost-breakdown`)],d);var f=3e4,p=6048e5,m=[`var(--ic-accent)`,`var(--ic-success)`,`var(--ic-warning)`,`var(--ic-info, #3b82f6)`,`var(--ic-error)`,`#a78bfa`,`#f472b6`,`#34d399`],h=class extends r{constructor(...e){super(...e),this.rpcClient=null,this.eventDispatcher=null,this._sse=null,this._reloadDebounce=null,this._loadState=`loading`,this._drillLevel=`total`,this._drillContext={},this._sinceMs=p,this._selectedRange=`7d`,this._billingTotal=null,this._previousTotal=null,this._providers=[],this._agentBillings=[],this._sessionBillings=[],this._refreshInterval=null,this._rpcStatusUnsub=null,this._fmtCost=new Intl.NumberFormat(`en-US`,{style:`currency`,currency:`USD`,minimumFractionDigits:2,maximumFractionDigits:2}),this._fmtNum=new Intl.NumberFormat(`en-US`)}static{this.styles=[o,i,n`
71
+ :host { display: block; }
72
+
73
+ .billing-view { padding: 0; }
74
+
75
+ .header {
76
+ display: flex;
77
+ justify-content: space-between;
78
+ align-items: center;
79
+ margin-bottom: var(--ic-space-lg);
80
+ flex-wrap: wrap;
81
+ gap: var(--ic-space-sm);
82
+ }
83
+
84
+ .breadcrumb {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: var(--ic-space-xs);
88
+ font-size: var(--ic-text-base);
89
+ font-weight: 600;
90
+ color: var(--ic-text);
91
+ }
92
+
93
+ .breadcrumb-link {
94
+ color: var(--ic-accent);
95
+ cursor: pointer;
96
+ background: none;
97
+ border: none;
98
+ font-size: inherit;
99
+ font-weight: inherit;
100
+ font-family: inherit;
101
+ padding: 0;
102
+ }
103
+
104
+ .breadcrumb-link:hover { text-decoration: underline; }
105
+ .breadcrumb-link:focus-visible { outline: 2px solid var(--ic-accent); outline-offset: 2px; }
106
+
107
+ .breadcrumb-sep { color: var(--ic-text-dim); }
108
+
109
+ .section { margin-bottom: var(--ic-space-xl); }
110
+
111
+ .section-title {
112
+ font-size: var(--ic-text-base);
113
+ font-weight: 600;
114
+ color: var(--ic-text);
115
+ margin-bottom: var(--ic-space-md);
116
+ }
117
+
118
+ .stats-row {
119
+ display: grid;
120
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
121
+ gap: var(--ic-space-md);
122
+ margin-bottom: var(--ic-space-lg);
123
+ }
124
+
125
+ .card {
126
+ background: var(--ic-surface);
127
+ border: 1px solid var(--ic-border);
128
+ border-radius: var(--ic-radius-lg);
129
+ padding: var(--ic-space-lg);
130
+ }
131
+
132
+ /* CSS grid tables */
133
+ .grid-table {
134
+ display: grid;
135
+ gap: 0;
136
+ font-size: var(--ic-text-sm);
137
+ }
138
+
139
+ .grid-header, .grid-row {
140
+ display: contents;
141
+ }
142
+
143
+ .grid-header > .cell {
144
+ font-weight: 600;
145
+ color: var(--ic-text-dim);
146
+ text-transform: uppercase;
147
+ letter-spacing: 0.05em;
148
+ font-size: var(--ic-text-xs);
149
+ padding: var(--ic-space-sm) var(--ic-space-md);
150
+ border-bottom: 1px solid var(--ic-border);
151
+ }
152
+
153
+ .grid-row > .cell {
154
+ padding: var(--ic-space-sm) var(--ic-space-md);
155
+ border-bottom: 1px solid var(--ic-border);
156
+ color: var(--ic-text);
157
+ }
158
+
159
+ .cell-right { text-align: right; }
160
+
161
+ .cell-mono {
162
+ font-family: var(--ic-font-mono, ui-monospace, monospace);
163
+ }
164
+
165
+ .grid-row.clickable > .cell { cursor: pointer; }
166
+ .grid-row.clickable:hover > .cell { background: var(--ic-surface-2, #1f2937); }
167
+
168
+ .provider-table, .model-table, .agent-table, .session-table {
169
+ grid-template-columns: 1fr repeat(3, auto);
170
+ }
171
+
172
+ .pct-bar {
173
+ display: inline-block;
174
+ height: 4px;
175
+ background: var(--ic-accent);
176
+ border-radius: 2px;
177
+ margin-right: var(--ic-space-xs);
178
+ vertical-align: middle;
179
+ }
180
+
181
+ .error-container {
182
+ display: flex;
183
+ flex-direction: column;
184
+ align-items: center;
185
+ gap: 0.75rem;
186
+ padding: 3rem;
187
+ }
188
+
189
+ .error-message { color: var(--ic-error); font-size: 0.875rem; }
190
+
191
+ .retry-btn {
192
+ padding: 0.5rem 1rem;
193
+ background: var(--ic-surface);
194
+ border: 1px solid var(--ic-border);
195
+ border-radius: 0.375rem;
196
+ color: var(--ic-text);
197
+ font-size: 0.8125rem;
198
+ cursor: pointer;
199
+ font-family: inherit;
200
+ }
201
+
202
+ .retry-btn:hover { background: var(--ic-surface-alt, #374151); }
203
+ `]}_formatCost(e){return this._fmtCost.format(e)}_formatNumber(e){return this._fmtNum.format(e)}connectedCallback(){super.connectedCallback(),this._initSse()}_initSse(){!this.eventDispatcher||this._sse||(this._sse=new u(this,this.eventDispatcher,{"observability:token_usage":()=>{this._scheduleReload()},"diagnostic:billing_snapshot":()=>{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()},f))}async _loadData(){if(!this.rpcClient||this.rpcClient.status!==`connected`){this._loadState=`loaded`;return}let e=this.rpcClient;try{switch(this._drillLevel){case`total`:await this._loadTotalLevel(e);break;case`provider`:await this._loadProviderLevel(e);break;case`agent`:await this._loadAgentLevel(e);break;case`session`:await this._loadSessionLevel(e);break}this._loadState=`loaded`}catch{this._loadState=`error`}}async _loadTotalLevel(e){let t=await e.call(`obs.billing.total`,{sinceMs:this._sinceMs});this._billingTotal={totalCost:Number(t.totalCost??0),totalTokens:Number(t.totalTokens??0),callCount:Number(t.callCount??0)},Promise.allSettled([e.call(`obs.billing.total`,{sinceMs:this._sinceMs*2}),e.call(`obs.billing.byProvider`,{sinceMs:this._sinceMs})]).then(([e,t])=>{if(e.status===`fulfilled`&&this._billingTotal){let t=e.value,n={totalCost:Number(t.totalCost??0),totalTokens:Number(t.totalTokens??0),callCount:Number(t.callCount??0)};this._previousTotal={totalCost:n.totalCost-this._billingTotal.totalCost,totalTokens:n.totalTokens-this._billingTotal.totalTokens,callCount:n.callCount-this._billingTotal.callCount}}if(t.status===`fulfilled`){let e=t.value;if(Array.isArray(e))this._providers=e;else{let t=e;this._providers=Array.isArray(t.providers)?t.providers:[]}}})}async _loadProviderLevel(e){let t=await e.call(`obs.billing.byProvider`,{sinceMs:this._sinceMs});if(Array.isArray(t))this._providers=t;else{let e=t;this._providers=Array.isArray(e.providers)?e.providers:[]}}async _loadAgentLevel(e){let t=await e.call(`agents.list`),n=(Array.isArray(t)?t:Array.isArray(t.agents)?t.agents:[]).map(e=>typeof e==`string`?e:e.id);if(n.length===0){this._agentBillings=[];return}let r=await Promise.allSettled(n.map(t=>e.call(`obs.billing.byAgent`,{agentId:t,sinceMs:this._sinceMs})));this._agentBillings=r.map((e,t)=>{if(e.status!==`fulfilled`)return null;let r=e.value;return{agentId:n[t],totalTokens:Number(r.tokensToday??r.totalTokens??0),percentOfTotal:Number(r.percentOfTotal??0),cost:Number(r.costToday??r.cost??0)}}).filter(e=>e!==null).sort((e,t)=>t.cost-e.cost)}async _loadSessionLevel(e){let t=this._drillContext.agentId;if(!t){this._sessionBillings=[];return}try{let n=await e.call(`obs.billing.bySession`,{sessionKey:`all`,agentId:t,sinceMs:this._sinceMs});if(Array.isArray(n))this._sessionBillings=n;else{let e=n;this._sessionBillings=Array.isArray(e.sessions)?e.sessions:[]}}catch{this._sessionBillings=[]}}_drillDown(e,t){this._drillLevel=e,this._drillContext={...this._drillContext,...t},this._loadData()}_drillUp(e){this._drillLevel=e,e===`total`?this._drillContext={}:e===`provider`?this._drillContext={provider:this._drillContext.provider}:e===`agent`&&(this._drillContext={provider:this._drillContext.provider,agentId:this._drillContext.agentId}),this._loadData()}_onTimeRangeChange(e){this._sinceMs=e.detail.sinceMs,this._selectedRange=e.detail.label,this._loadData()}_computeDelta(e,t){if(t===0)return e>0?{trend:`up`,value:`new`}:{trend:`flat`,value:``};let n=(e-t)/t*100;return Math.abs(n)<.1?{trend:`flat`,value:`0%`}:{trend:n>0?`up`:`down`,value:`${Math.abs(n).toFixed(1)}%`}}_renderBreadcrumb(){let e=[{label:`Billing`,level:`total`}];return this._drillLevel!==`total`&&this._drillContext.provider&&e.push({label:this._drillContext.provider,level:`provider`}),(this._drillLevel===`agent`||this._drillLevel===`session`)&&this._drillContext.agentId&&e.push({label:this._drillContext.agentId,level:`agent`}),this._drillLevel===`session`&&this._drillContext.sessionKey&&e.push({label:this._drillContext.sessionKey,level:`session`}),t`
204
+ <nav class="breadcrumb" aria-label="Billing navigation">
205
+ ${e.map((n,r)=>{let i=r===e.length-1;return t`
206
+ ${r>0?t`<span class="breadcrumb-sep">/</span>`:l}
207
+ ${i?t`<span>${n.label}</span>`:t`<button class="breadcrumb-link" @click=${()=>this._drillUp(n.level)}>${n.label}</button>`}
208
+ `})}
209
+ </nav>
210
+ `}_renderTotalLevel(){let e=this._billingTotal,n=this._previousTotal,r=e&&n?this._computeDelta(e.totalCost,n.totalCost):null,i=e&&n?this._computeDelta(e.totalTokens,n.totalTokens):null,a=e&&n?this._computeDelta(e.callCount,n.callCount):null,o=this._providers.map((e,t)=>({label:e.provider,value:e.totalCost,color:m[t%m.length]})),s=this._providers.reduce((e,t)=>e+(t.totalCacheSaved??0),0);return t`
211
+ <div class="stats-row">
212
+ <ic-stat-card
213
+ label="Total Cost"
214
+ .value=${e?this._formatCost(e.totalCost):`---`}
215
+ .trend=${r?.trend??``}
216
+ .trendValue=${r?.value??``}
217
+ ></ic-stat-card>
218
+ <ic-stat-card
219
+ label="Total Tokens"
220
+ .value=${e?this._formatNumber(e.totalTokens):`---`}
221
+ .trend=${i?.trend??``}
222
+ .trendValue=${i?.value??``}
223
+ ></ic-stat-card>
224
+ <ic-stat-card
225
+ label="API Calls"
226
+ .value=${e?this._formatNumber(e.callCount):`---`}
227
+ .trend=${a?.trend??``}
228
+ .trendValue=${a?.value??``}
229
+ ></ic-stat-card>
230
+ ${s>0?t`
231
+ <ic-stat-card
232
+ label="Cache Savings"
233
+ .value=${this._formatCost(s)}
234
+ trend="down"
235
+ trendValue="saved"
236
+ ></ic-stat-card>
237
+ `:l}
238
+ </div>
239
+
240
+ ${o.length>0?t`
241
+ <div class="section">
242
+ <div class="section-title">Cost by Provider</div>
243
+ <div class="card">
244
+ <ic-cost-breakdown
245
+ .segments=${o}
246
+ @segment-click=${e=>{this._drillDown(`provider`,{provider:e.detail.label})}}
247
+ ></ic-cost-breakdown>
248
+ </div>
249
+ </div>
250
+ `:l}
251
+ `}_renderProviderLevel(){let e=this._providers.find(e=>e.provider===this._drillContext.provider);if(!e)return t`<ic-empty-state icon="dollar-sign" message="No data for this provider"></ic-empty-state>`;let n=e.models??[],r=n.map((e,t)=>({label:e.model,value:e.cost,color:m[t%m.length]}));return t`
252
+ ${(e.totalCacheSaved??0)>0?t`
253
+ <div class="stats-row">
254
+ <ic-stat-card
255
+ label="Provider Cost"
256
+ .value=${this._formatCost(e.totalCost)}
257
+ ></ic-stat-card>
258
+ <ic-stat-card
259
+ label="Cache Savings"
260
+ .value=${this._formatCost(e.totalCacheSaved)}
261
+ trend="down"
262
+ trendValue="saved"
263
+ ></ic-stat-card>
264
+ </div>
265
+ `:l}
266
+
267
+ ${r.length>0?t`
268
+ <div class="section">
269
+ <div class="section-title">Cost by Model</div>
270
+ <div class="card">
271
+ <ic-cost-breakdown .segments=${r}></ic-cost-breakdown>
272
+ </div>
273
+ </div>
274
+ `:l}
275
+
276
+ <div class="section">
277
+ <div class="section-title">Model Breakdown</div>
278
+ <div class="card">
279
+ <div class="grid-table model-table" role="table" aria-label="Model breakdown">
280
+ <div class="grid-header" role="row">
281
+ <div class="cell" role="columnheader">Model</div>
282
+ <div class="cell cell-right" role="columnheader">Tokens</div>
283
+ <div class="cell cell-right" role="columnheader">Cost</div>
284
+ <div class="cell cell-right" role="columnheader">Calls</div>
285
+ </div>
286
+ ${n.map(n=>{let r=e.totalCost>0?n.cost/e.totalCost*100:0;return t`
287
+ <div class="grid-row" role="row">
288
+ <div class="cell" role="cell">${n.model}</div>
289
+ <div class="cell cell-mono cell-right" role="cell">${this._formatNumber(n.tokens)}</div>
290
+ <div class="cell cell-mono cell-right" role="cell">
291
+ <span class="pct-bar" style="width: ${Math.max(r,2)}px"></span>
292
+ ${this._formatCost(n.cost)} (${r.toFixed(1)}%)
293
+ </div>
294
+ <div class="cell cell-mono cell-right" role="cell">${this._formatNumber(n.calls)}</div>
295
+ </div>
296
+ `})}
297
+ </div>
298
+ </div>
299
+ </div>
300
+
301
+ <div class="section">
302
+ <button
303
+ class="breadcrumb-link"
304
+ @click=${()=>this._drillDown(`agent`,{})}
305
+ >View agent breakdown</button>
306
+ </div>
307
+ `}_renderAgentLevel(){return this._agentBillings.length===0?t`<ic-empty-state icon="users" message="No agent billing data available"></ic-empty-state>`:t`
308
+ <div class="section">
309
+ <div class="section-title">Agent Billing</div>
310
+ <div class="card">
311
+ <div class="grid-table agent-table" role="table" aria-label="Agent billing">
312
+ <div class="grid-header" role="row">
313
+ <div class="cell" role="columnheader">Agent ID</div>
314
+ <div class="cell cell-right" role="columnheader">Tokens</div>
315
+ <div class="cell cell-right" role="columnheader">% of Total</div>
316
+ <div class="cell cell-right" role="columnheader">Cost</div>
317
+ </div>
318
+ ${this._agentBillings.map(e=>t`
319
+ <div
320
+ class="grid-row clickable"
321
+ role="row"
322
+ @click=${()=>this._drillDown(`session`,{agentId:e.agentId})}
323
+ >
324
+ <div class="cell" role="cell">${e.agentId}</div>
325
+ <div class="cell cell-mono cell-right" role="cell">${this._formatNumber(e.totalTokens)}</div>
326
+ <div class="cell cell-mono cell-right" role="cell">${e.percentOfTotal.toFixed(1)}%</div>
327
+ <div class="cell cell-mono cell-right" role="cell">${this._formatCost(e.cost)}</div>
328
+ </div>
329
+ `)}
330
+ </div>
331
+ </div>
332
+ </div>
333
+ `}_renderSessionLevel(){return this._sessionBillings.length===0?t`<ic-empty-state icon="list" message="No session billing data available for this agent"></ic-empty-state>`:t`
334
+ <div class="section">
335
+ <div class="section-title">Session Billing</div>
336
+ <div class="card">
337
+ <div class="grid-table session-table" role="table" aria-label="Session billing">
338
+ <div class="grid-header" role="row">
339
+ <div class="cell" role="columnheader">Session Key</div>
340
+ <div class="cell cell-right" role="columnheader">Tokens</div>
341
+ <div class="cell cell-right" role="columnheader">Cost</div>
342
+ <div class="cell cell-right" role="columnheader">API Calls</div>
343
+ </div>
344
+ ${[...this._sessionBillings].sort((e,t)=>t.totalCost-e.totalCost).map(e=>t`
345
+ <div class="grid-row" role="row">
346
+ <div class="cell cell-mono" role="cell">${e.sessionKey}</div>
347
+ <div class="cell cell-mono cell-right" role="cell">${this._formatNumber(e.totalTokens)}</div>
348
+ <div class="cell cell-mono cell-right" role="cell">${this._formatCost(e.totalCost)}</div>
349
+ <div class="cell cell-mono cell-right" role="cell">${this._formatNumber(e.callCount)}</div>
350
+ </div>
351
+ `)}
352
+ </div>
353
+ </div>
354
+ </div>
355
+ `}render(){return this._loadState===`loading`&&!this.rpcClient?t`<ic-skeleton-view variant="table"></ic-skeleton-view>`:this._loadState===`error`?t`
356
+ <div class="error-container">
357
+ <span class="error-message">Failed to load billing data</span>
358
+ <button class="retry-btn" @click=${()=>this._tryLoad()}>Retry</button>
359
+ </div>
360
+ `:t`
361
+ <div class="billing-view">
362
+ <div class="header">
363
+ ${this._renderBreadcrumb()}
364
+ <ic-time-range-picker
365
+ .selected=${this._selectedRange}
366
+ @time-range-change=${this._onTimeRangeChange}
367
+ ></ic-time-range-picker>
368
+ </div>
369
+
370
+ ${this._drillLevel===`total`?this._renderTotalLevel():l}
371
+ ${this._drillLevel===`provider`?this._renderProviderLevel():l}
372
+ ${this._drillLevel===`agent`?this._renderAgentLevel():l}
373
+ ${this._drillLevel===`session`?this._renderSessionLevel():l}
374
+ </div>
375
+ `}};c([s({attribute:!1})],h.prototype,`rpcClient`,void 0),c([s({attribute:!1})],h.prototype,`eventDispatcher`,void 0),c([a()],h.prototype,`_loadState`,void 0),c([a()],h.prototype,`_drillLevel`,void 0),c([a()],h.prototype,`_drillContext`,void 0),c([a()],h.prototype,`_sinceMs`,void 0),c([a()],h.prototype,`_selectedRange`,void 0),c([a()],h.prototype,`_billingTotal`,void 0),c([a()],h.prototype,`_previousTotal`,void 0),c([a()],h.prototype,`_providers`,void 0),c([a()],h.prototype,`_agentBillings`,void 0),c([a()],h.prototype,`_sessionBillings`,void 0),h=c([e(`ic-billing-view`)],h);export{h as IcBillingView};