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,172 +1,4 @@
1
- import{a as v,S as f,b as a,I as p,A as u,s as _,f as w,i as z,n as g,r as l,t as y}from"./index-CEcM1R_C.js";import"./ic-data-table-CKUNTxHw.js";import"./ic-tag-CPPUnDLF.js";import"./ic-search-input-CSOxY9g7.js";import"./ic-confirm-dialog-CCDbB04e.js";import"./ic-empty-state-60l2ePhd.js";import"./ic-icon-xeGTVhVG.js";var x=Object.defineProperty,$=Object.getOwnPropertyDescriptor,n=(e,t,o,i)=>{for(var r=i>1?void 0:i?$(t,o):t,d=e.length-1,c;d>=0;d--)(c=e[d])&&(r=(i?c(t,o,r):c(r))||r);return i&&r&&x(t,o,r),r};const C={active:"success",idle:"info",suspended:"warning",error:"error"},k={active:"Active",idle:"Idle",suspended:"Suspended",error:"Error"},S=[{value:"active",label:"Active",color:"var(--ic-success)"},{value:"idle",label:"Idle",color:"var(--ic-info)"},{value:"suspended",label:"Suspended",color:"var(--ic-warning)"},{value:"error",label:"Error",color:"var(--ic-error)"}],A=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}),T={minimal:"Read and write only. Safest option for restricted environments.",coding:"Common tools including web, memory, and file operations.",messaging:"Optimized for chat and messaging workflows.",supervisor:"Extended tools for agent orchestration and oversight.",full:"All available tools. Best for autonomous agents with broad capabilities."};let s=class extends v{constructor(){super(...arguments),this.apiClient=null,this.rpcClient=null,this.eventDispatcher=null,this._sse=null,this._reloadDebounce=null,this._agents=[],this._loadState="loading",this._error="",this._deleteTarget=null,this._actionPending="",this._searchQuery="",this._statusFilters=new Set,this._wizardOpen=!1,this._wizardStep=1,this._wizardError="",this._wizardCreating=!1,this._wizardAgentId="",this._wizardAgentName="",this._wizardProvider="anthropic",this._wizardModel="",this._wizardToolProfile="full",this._catalogProviders=[]}connectedCallback(){super.connectedCallback(),this._initSse(),this.rpcClient&&this._loadModelCatalog()}updated(e){e.has("apiClient")&&this.apiClient&&this._loadAgents(),e.has("rpcClient")&&this.rpcClient&&this._catalogProviders.length===0&&this._loadModelCatalog(),e.has("eventDispatcher")&&this.eventDispatcher&&!this._sse&&this._initSse()}disconnectedCallback(){super.disconnectedCallback(),this._reloadDebounce!==null&&(clearTimeout(this._reloadDebounce),this._reloadDebounce=null)}_initSse(){!this.eventDispatcher||this._sse||(this._sse=new f(this,this.eventDispatcher,{"observability:token_usage":()=>{this._scheduleReload()},"agent:hot_added":()=>{this._scheduleReload()},"agent:hot_removed":()=>{this._scheduleReload()}}))}_scheduleReload(e=300){this._reloadDebounce!==null&&clearTimeout(this._reloadDebounce),this._reloadDebounce=setTimeout(()=>{this._reloadDebounce=null,this._loadAgents()},e)}async _loadModelCatalog(){if(this.rpcClient)try{const e=await this.rpcClient.call("models.list");e.providers&&(this._catalogProviders=e.providers)}catch{}}_budgetColor(e){return e>=90?"var(--ic-error)":e>=70?"var(--ic-warning)":"var(--ic-success)"}_getColumns(){return[{key:"status",label:"Status",sortable:!0,width:"100px",render:(e,t)=>{const o=C[t.status]??"default",i=k[t.status]??t.status;return a`<ic-tag variant=${o}>${i}</ic-tag>`}},{key:"name",label:"Name",sortable:!0,render:(e,t)=>a`<span>${t.name??t.id}</span>`},{key:"model",label:"Model",sortable:!0,render:(e,t)=>a`<span style="font-family: ui-monospace, monospace; font-size: 0.8125rem; white-space: nowrap;">${t.model}</span>`},{key:"messagesToday",label:"Messages",sortable:!0,render:e=>a`<span style="font-family: ui-monospace, monospace; text-align: right; width: 100%; display: block;">${new Intl.NumberFormat("en-US").format(e)}</span>`},{key:"costToday",label:"Cost",sortable:!0,render:e=>{const t=e;return a`<span style="font-family: ui-monospace, monospace; text-align: right; width: 100%; display: block;">${t>0?A.format(t):"--"}</span>`}},{key:"budgetUtilization",label:"Budget",sortable:!0,render:e=>{const t=Math.min(100,Math.max(0,e));return t===0?a`<span style="font-family: ui-monospace, monospace; text-align: right; width: 100%; display: block;">--</span>`:a`
2
- <div style="display: flex; align-items: center; gap: 6px; width: 100%;">
3
- <div style="flex: 1; height: 4px; background: var(--ic-surface-2, #1f2937); border-radius: 2px; overflow: hidden;">
4
- <div style="height: 100%; border-radius: 2px; width: ${t}%; background: ${this._budgetColor(t)};"></div>
5
- </div>
6
- <span style="font-size: 0.75rem; font-family: ui-monospace, monospace; color: var(--ic-text-muted); min-width: 2.5rem; text-align: right;">${t}%</span>
7
- </div>
8
- `}},{key:"_actions",label:"Actions",sortable:!1,render:(e,t)=>{const o=t.suspended||t.status==="suspended",i=o?"play":"pause",r=o?"Resume agent":"Suspend agent",d="display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; background: transparent; border: 1px solid transparent; border-radius: 0.25rem; color: #9ca3af; cursor: pointer;";return a`
9
- <div style="display: flex; gap: 4px; justify-content: flex-end;">
10
- <button style=${d} aria-label="Configure ${t.id}" @click=${c=>{c.stopPropagation(),this._navigate(`agents/${t.id}/edit`)}}>
11
- <ic-icon name="settings" size="16px" color="#9ca3af"></ic-icon>
12
- </button>
13
- <button style=${d} aria-label=${r} @click=${c=>{c.stopPropagation(),this._handleSuspendResume(t,c)}}>
14
- <ic-icon name=${i} size="16px" color="#9ca3af"></ic-icon>
15
- </button>
16
- <button style=${d} aria-label="Delete ${t.id}" @click=${c=>{c.stopPropagation(),this._handleDeleteClick(t,c)}}>
17
- <ic-icon name="trash" size="16px" color="#f87171"></ic-icon>
18
- </button>
19
- </div>
20
- `}}]}async _loadAgents(){if(this.apiClient){this._loadState="loading",this._error="";try{const e=await this.apiClient.getAgents();this._agents=e.map(t=>({...t,costToday:0,budgetUtilization:0,suspended:t.status==="suspended",messagesToday:t.messagesToday??0})),this._loadState="loaded",this._enrichAgents(e).then(t=>{this._agents=t}).catch(()=>{})}catch(e){this._error=e instanceof Error?e.message:"Failed to load agents",this._loadState="error"}}}async _enrichAgents(e){if(!this.rpcClient||e.length===0)return e.map(r=>({...r,costToday:0,budgetUtilization:0,suspended:r.status==="suspended",messagesToday:r.messagesToday??0}));const t=e.slice(0,50),o=await Promise.allSettled(t.map(r=>this.rpcClient.call("obs.billing.byAgent",{agentId:r.id}))),i=new Map;for(let r=0;r<t.length;r++){const d=o[r];d.status==="fulfilled"&&d.value&&i.set(t[r].id,d.value)}return e.map(r=>{const d=i.get(r.id);let c=0;const h=d?.budgetUsed;h?.perDay?.used!==void 0&&h.perDay.limit&&(c=Math.round(h.perDay.used/h.perDay.limit*100));const m=Number(d?.costToday??d?.totalCost??0),b=Number(d?.messagesToday??r.messagesToday??0);return{...r,costToday:m,budgetUtilization:c,suspended:r.status==="suspended",messagesToday:b}})}_getFilteredAgents(){let e=this._agents;if(this._searchQuery){const t=this._searchQuery.toLowerCase();e=e.filter(o=>o.id.toLowerCase().includes(t)||(o.name??"").toLowerCase().includes(t))}return this._statusFilters.size>0&&(e=e.filter(t=>this._statusFilters.has(t.status))),e}_navigate(e){this.dispatchEvent(new CustomEvent("navigate",{detail:e,bubbles:!0,composed:!0}))}_handleSearch(e){this._searchQuery=e.detail}_handleFilterChange(e){this._statusFilters=e.detail.selected}async _handleSuspendResume(e,t){if(t.stopPropagation(),!this.rpcClient||this._actionPending)return;this._actionPending=e.id;const o=e.suspended||e.status==="suspended",i=o?"agents.resume":"agents.suspend",r=o?"resumed":"suspended";try{await this.rpcClient.call(i,{agentId:e.id}),p.show(`Agent ${e.id} ${r}`,"success"),await this._loadAgents()}catch(d){p.show(`Failed to ${o?"resume":"suspend"} agent: ${d instanceof Error?d.message:"Unknown error"}`,"error")}finally{this._actionPending=""}}_handleDeleteClick(e,t){t.stopPropagation(),this._deleteTarget=e}async _confirmDelete(){if(!this.rpcClient||!this._deleteTarget)return;const e=this._deleteTarget.id;this._deleteTarget=null;try{await this.rpcClient.call("agents.delete",{agentId:e}),p.show(`Agent ${e} deleted`,"success"),await this._loadAgents()}catch(t){p.show(`Failed to delete agent: ${t instanceof Error?t.message:"Unknown error"}`,"error")}}_cancelDelete(){this._deleteTarget=null}_openWizard(){this._wizardOpen=!0,this._wizardStep=1,this._wizardError="",this._wizardCreating=!1,this._wizardAgentId="",this._wizardAgentName="",this._wizardProvider="anthropic",this._wizardModel="",this._wizardToolProfile="full",this._catalogProviders.length===0&&this._loadModelCatalog(),this.updateComplete.then(()=>{this.shadowRoot?.querySelector(".wizard-dialog")?.showModal()})}_closeWizard(){this.shadowRoot?.querySelector(".wizard-dialog")?.close(),this._wizardOpen=!1}_wizardNext(){if(this._wizardStep===1){if(!this._wizardAgentId.match(/^[a-zA-Z0-9-]{3,50}$/)){this._wizardError="Agent ID must be 3-50 characters (letters, numbers, hyphens).";return}this._wizardError="",this._wizardStep=2}else if(this._wizardStep===2){if(!this._wizardModel.trim()){this._wizardError="Please select a model.";return}this._wizardError="",this._wizardStep=3}}_wizardBack(){this._wizardError="",this._wizardStep===2?this._wizardStep=1:this._wizardStep===3&&(this._wizardStep=2)}async _wizardCreate(){if(!(!this.rpcClient||this._wizardCreating)){this._wizardCreating=!0,this._wizardError="";try{await this.rpcClient.call("agents.create",{agentId:this._wizardAgentId,config:{name:this._wizardAgentName||void 0,provider:this._wizardProvider,model:this._wizardModel,skills:{toolPolicy:{profile:this._wizardToolProfile}}}}),p.show(`Agent ${this._wizardAgentId} created`,"success"),this._closeWizard(),this._navigate(`agents/${this._wizardAgentId}/edit`),await this._loadAgents()}catch(e){this._wizardError=e instanceof Error?e.message:"Failed to create agent"}finally{this._wizardCreating=!1}}}render(){return a`
21
- <div class="page-header" role="region" aria-label="Agents">
22
- <h1 class="page-title">Agents</h1>
23
- <button class="create-btn" @click=${this._openWizard}>
24
- <ic-icon name="plus" size="16px"></ic-icon>
25
- Create Agent
26
- </button>
27
- </div>
28
- ${this._renderContent()}
29
- ${this._deleteTarget?a`
30
- <ic-confirm-dialog
31
- open
32
- variant="danger"
33
- title="Delete Agent"
34
- message=${`Are you sure you want to delete agent ${this._deleteTarget.id}? This cannot be undone.`}
35
- confirmLabel="Delete"
36
- @confirm=${this._confirmDelete}
37
- @cancel=${this._cancelDelete}
38
- ></ic-confirm-dialog>
39
- `:u}
40
- ${this._wizardOpen?this._renderWizard():u}
41
- `}_renderContent(){switch(this._loadState){case"loading":return a`<ic-skeleton-view variant="list"></ic-skeleton-view>`;case"error":return a`
42
- <div class="error-container">
43
- <div class="error-message">${this._error}</div>
44
- <button class="retry-btn" @click=${()=>this._loadAgents()}>Retry</button>
45
- </div>
46
- `;case"loaded":return this._agents.length===0?a`
47
- <ic-empty-state
48
- icon="users"
49
- message="No agents configured"
50
- description="Create your first agent to start processing messages."
51
- >
52
- <button class="create-btn" @click=${this._openWizard}>
53
- <ic-icon name="plus" size="16px"></ic-icon>
54
- Create Agent
55
- </button>
56
- </ic-empty-state>
57
- `:this._renderTable()}}_renderTable(){const e=this._getFilteredAgents(),t=this._getColumns();return a`
58
- <div class="toolbar">
59
- <ic-search-input
60
- placeholder="Search agents..."
61
- @search=${this._handleSearch}
62
- ></ic-search-input>
63
- <ic-filter-chips
64
- .options=${S}
65
- .selected=${this._statusFilters}
66
- @filter-change=${this._handleFilterChange}
67
- ></ic-filter-chips>
68
- </div>
69
- <ic-data-table
70
- .columns=${t}
71
- .rows=${e}
72
- emptyMessage="No agents match your filters"
73
- @row-click=${o=>{this._navigate(`agents/${o.detail.id}`)}}
74
- ></ic-data-table>
75
- `}_renderWizard(){return a`
76
- <dialog class="wizard-dialog" @close=${this._closeWizard}>
77
- <div class="wizard-content">
78
- <div class="wizard-header">
79
- <h2 class="wizard-title">Create Agent</h2>
80
- <button class="wizard-close" @click=${this._closeWizard}>\u2715</button>
81
- </div>
82
-
83
- <div class="wizard-steps">
84
- ${[1,2,3].map(e=>a`
85
- <span
86
- class="step-dot ${e===this._wizardStep?"step-dot--active":""} ${e<this._wizardStep?"step-dot--done":""}"
87
- ></span>
88
- `)}
89
- <span class="step-label">Step ${this._wizardStep} of 3</span>
90
- </div>
91
-
92
- ${this._wizardError?a`<div class="wizard-error">${this._wizardError}</div>`:u}
93
-
94
- ${this._renderWizardStep()}
95
-
96
- <div class="wizard-footer">
97
- ${this._wizardStep>1?a`<button class="wizard-btn wizard-btn--secondary" @click=${this._wizardBack}>Back</button>`:a`<button class="wizard-btn wizard-btn--secondary" @click=${this._closeWizard}>Cancel</button>`}
98
- ${this._wizardStep<3?a`<button class="wizard-btn wizard-btn--primary" @click=${this._wizardNext}>Next</button>`:a`<button
99
- class="wizard-btn wizard-btn--primary"
100
- ?disabled=${this._wizardCreating}
101
- @click=${this._wizardCreate}
102
- >${this._wizardCreating?"Creating...":"Create Agent"}</button>`}
103
- </div>
104
- </div>
105
- </dialog>
106
- `}_renderWizardStep(){switch(this._wizardStep){case 1:return a`
107
- <div class="wizard-field">
108
- <label for="wizard-id">Agent ID</label>
109
- <input
110
- id="wizard-id"
111
- type="text"
112
- .value=${this._wizardAgentId}
113
- @input=${e=>{this._wizardAgentId=e.target.value}}
114
- placeholder="my-agent"
115
- required
116
- />
117
- <div class="hint">3-50 characters. Letters, numbers, and hyphens only.</div>
118
- </div>
119
- <div class="wizard-field">
120
- <label for="wizard-name">Display Name</label>
121
- <input
122
- id="wizard-name"
123
- type="text"
124
- .value=${this._wizardAgentName}
125
- @input=${e=>{this._wizardAgentName=e.target.value}}
126
- placeholder="My Agent (optional)"
127
- />
128
- </div>
129
- `;case 2:{const e=this._catalogProviders.length>0?this._catalogProviders.map(i=>({value:i.name,label:i.name.charAt(0).toUpperCase()+i.name.slice(1)})):[{value:"anthropic",label:"Anthropic"}],o=(this._catalogProviders.find(i=>i.name===this._wizardProvider)?.models??[]).map(i=>({id:i.modelId,label:i.displayName||i.modelId}));return a`
130
- <div class="wizard-field">
131
- <label for="wizard-provider">Provider</label>
132
- <select
133
- id="wizard-provider"
134
- .value=${this._wizardProvider}
135
- @change=${i=>{this._wizardProvider=i.target.value,this._wizardModel=""}}
136
- >
137
- ${e.map(i=>a`<option value=${i.value} ?selected=${i.value===this._wizardProvider}>${i.label}</option>`)}
138
- </select>
139
- </div>
140
- <div class="wizard-field">
141
- <label for="wizard-model">Model</label>
142
- <select
143
- id="wizard-model"
144
- .value=${this._wizardModel}
145
- @change=${i=>{this._wizardModel=i.target.value}}
146
- required
147
- >
148
- <option value="" disabled ?selected=${!this._wizardModel}>Select a model...</option>
149
- ${o.map(i=>a`<option value=${i.id} ?selected=${this._wizardModel===i.id}>${i.label}</option>`)}
150
- </select>
151
- <div class="hint">Model to use for this agent.</div>
152
- </div>
153
- `}case 3:return a`
154
- <div class="wizard-field">
155
- <label for="wizard-tools">Tool Policy Profile</label>
156
- <select
157
- id="wizard-tools"
158
- .value=${this._wizardToolProfile}
159
- @change=${e=>{this._wizardToolProfile=e.target.value}}
160
- >
161
- <option value="minimal">Minimal</option>
162
- <option value="coding">Coding</option>
163
- <option value="messaging">Messaging</option>
164
- <option value="supervisor">Supervisor</option>
165
- <option value="full">Full</option>
166
- </select>
167
- <div class="profile-desc">${T[this._wizardToolProfile]??""}</div>
168
- </div>
169
- `}}};s.styles=[_,w,z`
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{a as u,i as d}from"./index-BBkuC-EU.js";import"./ic-tag-CvMVQFRR.js";import"./ic-confirm-dialog-DGlPbV1T.js";import"./ic-data-table-CKIvr-ag.js";import"./ic-search-input-B02AGw1i.js";import"./ic-icon-BGNCCPpZ.js";import"./ic-empty-state-CM3Wbj2f.js";var f={active:`success`,idle:`info`,suspended:`warning`,error:`error`},p={active:`Active`,idle:`Idle`,suspended:`Suspended`,error:`Error`},m=[{value:`active`,label:`Active`,color:`var(--ic-success)`},{value:`idle`,label:`Idle`,color:`var(--ic-info)`},{value:`suspended`,label:`Suspended`,color:`var(--ic-warning)`},{value:`error`,label:`Error`,color:`var(--ic-error)`}],h=new Intl.NumberFormat(`en-US`,{style:`currency`,currency:`USD`}),g={minimal:`Read and write only. Safest option for restricted environments.`,coding:`Common tools including web, memory, and file operations.`,messaging:`Optimized for chat and messaging workflows.`,supervisor:`Extended tools for agent orchestration and oversight.`,full:`All available tools. Best for autonomous agents with broad capabilities.`},_=class extends r{constructor(...e){super(...e),this.apiClient=null,this.rpcClient=null,this.eventDispatcher=null,this._sse=null,this._reloadDebounce=null,this._agents=[],this._loadState=`loading`,this._error=``,this._deleteTarget=null,this._actionPending=``,this._searchQuery=``,this._statusFilters=new Set,this._wizardOpen=!1,this._wizardStep=1,this._wizardError=``,this._wizardCreating=!1,this._wizardAgentId=``,this._wizardAgentName=``,this._wizardProvider=`anthropic`,this._wizardModel=``,this._wizardToolProfile=`full`,this._catalogProviders=[]}static{this.styles=[o,i,n`
170
2
  :host {
171
3
  display: block;
172
4
  }
@@ -501,4 +333,172 @@ import{a as v,S as f,b as a,I as p,A as u,s as _,f as w,i as z,n as g,r as l,t a
501
333
  opacity: 0.5;
502
334
  cursor: not-allowed;
503
335
  }
504
- `];n([g({attribute:!1})],s.prototype,"apiClient",2);n([g({attribute:!1})],s.prototype,"rpcClient",2);n([g({attribute:!1})],s.prototype,"eventDispatcher",2);n([l()],s.prototype,"_agents",2);n([l()],s.prototype,"_loadState",2);n([l()],s.prototype,"_error",2);n([l()],s.prototype,"_deleteTarget",2);n([l()],s.prototype,"_actionPending",2);n([l()],s.prototype,"_searchQuery",2);n([l()],s.prototype,"_statusFilters",2);n([l()],s.prototype,"_wizardOpen",2);n([l()],s.prototype,"_wizardStep",2);n([l()],s.prototype,"_wizardError",2);n([l()],s.prototype,"_wizardCreating",2);n([l()],s.prototype,"_wizardAgentId",2);n([l()],s.prototype,"_wizardAgentName",2);n([l()],s.prototype,"_wizardProvider",2);n([l()],s.prototype,"_wizardModel",2);n([l()],s.prototype,"_wizardToolProfile",2);n([l()],s.prototype,"_catalogProviders",2);s=n([y("ic-agent-list")],s);export{s as IcAgentList};
336
+ `]}connectedCallback(){super.connectedCallback(),this._initSse(),this.rpcClient&&this._loadModelCatalog()}updated(e){e.has(`apiClient`)&&this.apiClient&&this._loadAgents(),e.has(`rpcClient`)&&this.rpcClient&&this._catalogProviders.length===0&&this._loadModelCatalog(),e.has(`eventDispatcher`)&&this.eventDispatcher&&!this._sse&&this._initSse()}disconnectedCallback(){super.disconnectedCallback(),this._reloadDebounce!==null&&(clearTimeout(this._reloadDebounce),this._reloadDebounce=null)}_initSse(){!this.eventDispatcher||this._sse||(this._sse=new d(this,this.eventDispatcher,{"observability:token_usage":()=>{this._scheduleReload()},"agent:hot_added":()=>{this._scheduleReload()},"agent:hot_removed":()=>{this._scheduleReload()}}))}_scheduleReload(e=300){this._reloadDebounce!==null&&clearTimeout(this._reloadDebounce),this._reloadDebounce=setTimeout(()=>{this._reloadDebounce=null,this._loadAgents()},e)}async _loadModelCatalog(){if(this.rpcClient)try{let e=await this.rpcClient.call(`models.list`);e.providers&&(this._catalogProviders=e.providers)}catch{}}_budgetColor(e){return e>=90?`var(--ic-error)`:e>=70?`var(--ic-warning)`:`var(--ic-success)`}_getColumns(){return[{key:`status`,label:`Status`,sortable:!0,width:`100px`,render:(e,n)=>t`<ic-tag variant=${f[n.status]??`default`}>${p[n.status]??n.status}</ic-tag>`},{key:`name`,label:`Name`,sortable:!0,render:(e,n)=>t`<span>${n.name??n.id}</span>`},{key:`model`,label:`Model`,sortable:!0,render:(e,n)=>t`<span style="font-family: ui-monospace, monospace; font-size: 0.8125rem; white-space: nowrap;">${n.model}</span>`},{key:`messagesToday`,label:`Messages`,sortable:!0,render:e=>t`<span style="font-family: ui-monospace, monospace; text-align: right; width: 100%; display: block;">${new Intl.NumberFormat(`en-US`).format(e)}</span>`},{key:`costToday`,label:`Cost`,sortable:!0,render:e=>{let n=e;return t`<span style="font-family: ui-monospace, monospace; text-align: right; width: 100%; display: block;">${n>0?h.format(n):`--`}</span>`}},{key:`budgetUtilization`,label:`Budget`,sortable:!0,render:e=>{let n=Math.min(100,Math.max(0,e));return n===0?t`<span style="font-family: ui-monospace, monospace; text-align: right; width: 100%; display: block;">--</span>`:t`
337
+ <div style="display: flex; align-items: center; gap: 6px; width: 100%;">
338
+ <div style="flex: 1; height: 4px; background: var(--ic-surface-2, #1f2937); border-radius: 2px; overflow: hidden;">
339
+ <div style="height: 100%; border-radius: 2px; width: ${n}%; background: ${this._budgetColor(n)};"></div>
340
+ </div>
341
+ <span style="font-size: 0.75rem; font-family: ui-monospace, monospace; color: var(--ic-text-muted); min-width: 2.5rem; text-align: right;">${n}%</span>
342
+ </div>
343
+ `}},{key:`_actions`,label:`Actions`,sortable:!1,render:(e,n)=>{let r=n.suspended||n.status===`suspended`,i=r?`play`:`pause`,a=r?`Resume agent`:`Suspend agent`,o=`display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; background: transparent; border: 1px solid transparent; border-radius: 0.25rem; color: #9ca3af; cursor: pointer;`;return t`
344
+ <div style="display: flex; gap: 4px; justify-content: flex-end;">
345
+ <button style=${o} aria-label="Configure ${n.id}" @click=${e=>{e.stopPropagation(),this._navigate(`agents/${n.id}/edit`)}}>
346
+ <ic-icon name="settings" size="16px" color="#9ca3af"></ic-icon>
347
+ </button>
348
+ <button style=${o} aria-label=${a} @click=${e=>{e.stopPropagation(),this._handleSuspendResume(n,e)}}>
349
+ <ic-icon name=${i} size="16px" color="#9ca3af"></ic-icon>
350
+ </button>
351
+ <button style=${o} aria-label="Delete ${n.id}" @click=${e=>{e.stopPropagation(),this._handleDeleteClick(n,e)}}>
352
+ <ic-icon name="trash" size="16px" color="#f87171"></ic-icon>
353
+ </button>
354
+ </div>
355
+ `}}]}async _loadAgents(){if(this.apiClient){this._loadState=`loading`,this._error=``;try{let e=await this.apiClient.getAgents();this._agents=e.map(e=>({...e,costToday:0,budgetUtilization:0,suspended:e.status===`suspended`,messagesToday:e.messagesToday??0})),this._loadState=`loaded`,this._enrichAgents(e).then(e=>{this._agents=e}).catch(()=>{})}catch(e){this._error=e instanceof Error?e.message:`Failed to load agents`,this._loadState=`error`}}}async _enrichAgents(e){if(!this.rpcClient||e.length===0)return e.map(e=>({...e,costToday:0,budgetUtilization:0,suspended:e.status===`suspended`,messagesToday:e.messagesToday??0}));let t=e.slice(0,50),n=await Promise.allSettled(t.map(e=>this.rpcClient.call(`obs.billing.byAgent`,{agentId:e.id}))),r=new Map;for(let e=0;e<t.length;e++){let i=n[e];i.status===`fulfilled`&&i.value&&r.set(t[e].id,i.value)}return e.map(e=>{let t=r.get(e.id),n=0,i=t?.budgetUsed;i?.perDay?.used!==void 0&&i.perDay.limit&&(n=Math.round(i.perDay.used/i.perDay.limit*100));let a=Number(t?.costToday??t?.totalCost??0),o=Number(t?.messagesToday??e.messagesToday??0);return{...e,costToday:a,budgetUtilization:n,suspended:e.status===`suspended`,messagesToday:o}})}_getFilteredAgents(){let e=this._agents;if(this._searchQuery){let t=this._searchQuery.toLowerCase();e=e.filter(e=>e.id.toLowerCase().includes(t)||(e.name??``).toLowerCase().includes(t))}return this._statusFilters.size>0&&(e=e.filter(e=>this._statusFilters.has(e.status))),e}_navigate(e){this.dispatchEvent(new CustomEvent(`navigate`,{detail:e,bubbles:!0,composed:!0}))}_handleSearch(e){this._searchQuery=e.detail}_handleFilterChange(e){this._statusFilters=e.detail.selected}async _handleSuspendResume(e,t){if(t.stopPropagation(),!this.rpcClient||this._actionPending)return;this._actionPending=e.id;let n=e.suspended||e.status===`suspended`,r=n?`agents.resume`:`agents.suspend`,i=n?`resumed`:`suspended`;try{await this.rpcClient.call(r,{agentId:e.id}),u.show(`Agent ${e.id} ${i}`,`success`),await this._loadAgents()}catch(e){u.show(`Failed to ${n?`resume`:`suspend`} agent: ${e instanceof Error?e.message:`Unknown error`}`,`error`)}finally{this._actionPending=``}}_handleDeleteClick(e,t){t.stopPropagation(),this._deleteTarget=e}async _confirmDelete(){if(!this.rpcClient||!this._deleteTarget)return;let e=this._deleteTarget.id;this._deleteTarget=null;try{await this.rpcClient.call(`agents.delete`,{agentId:e}),u.show(`Agent ${e} deleted`,`success`),await this._loadAgents()}catch(e){u.show(`Failed to delete agent: ${e instanceof Error?e.message:`Unknown error`}`,`error`)}}_cancelDelete(){this._deleteTarget=null}_openWizard(){this._wizardOpen=!0,this._wizardStep=1,this._wizardError=``,this._wizardCreating=!1,this._wizardAgentId=``,this._wizardAgentName=``,this._wizardProvider=`anthropic`,this._wizardModel=``,this._wizardToolProfile=`full`,this._catalogProviders.length===0&&this._loadModelCatalog(),this.updateComplete.then(()=>{(this.shadowRoot?.querySelector(`.wizard-dialog`))?.showModal()})}_closeWizard(){(this.shadowRoot?.querySelector(`.wizard-dialog`))?.close(),this._wizardOpen=!1}_wizardNext(){if(this._wizardStep===1){if(!this._wizardAgentId.match(/^[a-zA-Z0-9-]{3,50}$/)){this._wizardError=`Agent ID must be 3-50 characters (letters, numbers, hyphens).`;return}this._wizardError=``,this._wizardStep=2}else if(this._wizardStep===2){if(!this._wizardModel.trim()){this._wizardError=`Please select a model.`;return}this._wizardError=``,this._wizardStep=3}}_wizardBack(){this._wizardError=``,this._wizardStep===2?this._wizardStep=1:this._wizardStep===3&&(this._wizardStep=2)}async _wizardCreate(){if(!(!this.rpcClient||this._wizardCreating)){this._wizardCreating=!0,this._wizardError=``;try{await this.rpcClient.call(`agents.create`,{agentId:this._wizardAgentId,config:{name:this._wizardAgentName||void 0,provider:this._wizardProvider,model:this._wizardModel,skills:{toolPolicy:{profile:this._wizardToolProfile}}}}),u.show(`Agent ${this._wizardAgentId} created`,`success`),this._closeWizard(),this._navigate(`agents/${this._wizardAgentId}/edit`),await this._loadAgents()}catch(e){this._wizardError=e instanceof Error?e.message:`Failed to create agent`}finally{this._wizardCreating=!1}}}render(){return t`
356
+ <div class="page-header" role="region" aria-label="Agents">
357
+ <h1 class="page-title">Agents</h1>
358
+ <button class="create-btn" @click=${this._openWizard}>
359
+ <ic-icon name="plus" size="16px"></ic-icon>
360
+ Create Agent
361
+ </button>
362
+ </div>
363
+ ${this._renderContent()}
364
+ ${this._deleteTarget?t`
365
+ <ic-confirm-dialog
366
+ open
367
+ variant="danger"
368
+ title="Delete Agent"
369
+ message=${`Are you sure you want to delete agent ${this._deleteTarget.id}? This cannot be undone.`}
370
+ confirmLabel="Delete"
371
+ @confirm=${this._confirmDelete}
372
+ @cancel=${this._cancelDelete}
373
+ ></ic-confirm-dialog>
374
+ `:l}
375
+ ${this._wizardOpen?this._renderWizard():l}
376
+ `}_renderContent(){switch(this._loadState){case`loading`:return t`<ic-skeleton-view variant="list"></ic-skeleton-view>`;case`error`:return t`
377
+ <div class="error-container">
378
+ <div class="error-message">${this._error}</div>
379
+ <button class="retry-btn" @click=${()=>this._loadAgents()}>Retry</button>
380
+ </div>
381
+ `;case`loaded`:return this._agents.length===0?t`
382
+ <ic-empty-state
383
+ icon="users"
384
+ message="No agents configured"
385
+ description="Create your first agent to start processing messages."
386
+ >
387
+ <button class="create-btn" @click=${this._openWizard}>
388
+ <ic-icon name="plus" size="16px"></ic-icon>
389
+ Create Agent
390
+ </button>
391
+ </ic-empty-state>
392
+ `:this._renderTable()}}_renderTable(){let e=this._getFilteredAgents(),n=this._getColumns();return t`
393
+ <div class="toolbar">
394
+ <ic-search-input
395
+ placeholder="Search agents..."
396
+ @search=${this._handleSearch}
397
+ ></ic-search-input>
398
+ <ic-filter-chips
399
+ .options=${m}
400
+ .selected=${this._statusFilters}
401
+ @filter-change=${this._handleFilterChange}
402
+ ></ic-filter-chips>
403
+ </div>
404
+ <ic-data-table
405
+ .columns=${n}
406
+ .rows=${e}
407
+ emptyMessage="No agents match your filters"
408
+ @row-click=${e=>{this._navigate(`agents/${e.detail.id}`)}}
409
+ ></ic-data-table>
410
+ `}_renderWizard(){return t`
411
+ <dialog class="wizard-dialog" @close=${this._closeWizard}>
412
+ <div class="wizard-content">
413
+ <div class="wizard-header">
414
+ <h2 class="wizard-title">Create Agent</h2>
415
+ <button class="wizard-close" @click=${this._closeWizard}>\u2715</button>
416
+ </div>
417
+
418
+ <div class="wizard-steps">
419
+ ${[1,2,3].map(e=>t`
420
+ <span
421
+ class="step-dot ${e===this._wizardStep?`step-dot--active`:``} ${e<this._wizardStep?`step-dot--done`:``}"
422
+ ></span>
423
+ `)}
424
+ <span class="step-label">Step ${this._wizardStep} of 3</span>
425
+ </div>
426
+
427
+ ${this._wizardError?t`<div class="wizard-error">${this._wizardError}</div>`:l}
428
+
429
+ ${this._renderWizardStep()}
430
+
431
+ <div class="wizard-footer">
432
+ ${this._wizardStep>1?t`<button class="wizard-btn wizard-btn--secondary" @click=${this._wizardBack}>Back</button>`:t`<button class="wizard-btn wizard-btn--secondary" @click=${this._closeWizard}>Cancel</button>`}
433
+ ${this._wizardStep<3?t`<button class="wizard-btn wizard-btn--primary" @click=${this._wizardNext}>Next</button>`:t`<button
434
+ class="wizard-btn wizard-btn--primary"
435
+ ?disabled=${this._wizardCreating}
436
+ @click=${this._wizardCreate}
437
+ >${this._wizardCreating?`Creating...`:`Create Agent`}</button>`}
438
+ </div>
439
+ </div>
440
+ </dialog>
441
+ `}_renderWizardStep(){switch(this._wizardStep){case 1:return t`
442
+ <div class="wizard-field">
443
+ <label for="wizard-id">Agent ID</label>
444
+ <input
445
+ id="wizard-id"
446
+ type="text"
447
+ .value=${this._wizardAgentId}
448
+ @input=${e=>{this._wizardAgentId=e.target.value}}
449
+ placeholder="my-agent"
450
+ required
451
+ />
452
+ <div class="hint">3-50 characters. Letters, numbers, and hyphens only.</div>
453
+ </div>
454
+ <div class="wizard-field">
455
+ <label for="wizard-name">Display Name</label>
456
+ <input
457
+ id="wizard-name"
458
+ type="text"
459
+ .value=${this._wizardAgentName}
460
+ @input=${e=>{this._wizardAgentName=e.target.value}}
461
+ placeholder="My Agent (optional)"
462
+ />
463
+ </div>
464
+ `;case 2:{let e=this._catalogProviders.length>0?this._catalogProviders.map(e=>({value:e.name,label:e.name.charAt(0).toUpperCase()+e.name.slice(1)})):[{value:`anthropic`,label:`Anthropic`}],n=(this._catalogProviders.find(e=>e.name===this._wizardProvider)?.models??[]).map(e=>({id:e.modelId,label:e.displayName||e.modelId}));return t`
465
+ <div class="wizard-field">
466
+ <label for="wizard-provider">Provider</label>
467
+ <select
468
+ id="wizard-provider"
469
+ .value=${this._wizardProvider}
470
+ @change=${e=>{this._wizardProvider=e.target.value,this._wizardModel=``}}
471
+ >
472
+ ${e.map(e=>t`<option value=${e.value} ?selected=${e.value===this._wizardProvider}>${e.label}</option>`)}
473
+ </select>
474
+ </div>
475
+ <div class="wizard-field">
476
+ <label for="wizard-model">Model</label>
477
+ <select
478
+ id="wizard-model"
479
+ .value=${this._wizardModel}
480
+ @change=${e=>{this._wizardModel=e.target.value}}
481
+ required
482
+ >
483
+ <option value="" disabled ?selected=${!this._wizardModel}>Select a model...</option>
484
+ ${n.map(e=>t`<option value=${e.id} ?selected=${this._wizardModel===e.id}>${e.label}</option>`)}
485
+ </select>
486
+ <div class="hint">Model to use for this agent.</div>
487
+ </div>
488
+ `}case 3:return t`
489
+ <div class="wizard-field">
490
+ <label for="wizard-tools">Tool Policy Profile</label>
491
+ <select
492
+ id="wizard-tools"
493
+ .value=${this._wizardToolProfile}
494
+ @change=${e=>{this._wizardToolProfile=e.target.value}}
495
+ >
496
+ <option value="minimal">Minimal</option>
497
+ <option value="coding">Coding</option>
498
+ <option value="messaging">Messaging</option>
499
+ <option value="supervisor">Supervisor</option>
500
+ <option value="full">Full</option>
501
+ </select>
502
+ <div class="profile-desc">${g[this._wizardToolProfile]??``}</div>
503
+ </div>
504
+ `}}};c([s({attribute:!1})],_.prototype,`apiClient`,void 0),c([s({attribute:!1})],_.prototype,`rpcClient`,void 0),c([s({attribute:!1})],_.prototype,`eventDispatcher`,void 0),c([a()],_.prototype,`_agents`,void 0),c([a()],_.prototype,`_loadState`,void 0),c([a()],_.prototype,`_error`,void 0),c([a()],_.prototype,`_deleteTarget`,void 0),c([a()],_.prototype,`_actionPending`,void 0),c([a()],_.prototype,`_searchQuery`,void 0),c([a()],_.prototype,`_statusFilters`,void 0),c([a()],_.prototype,`_wizardOpen`,void 0),c([a()],_.prototype,`_wizardStep`,void 0),c([a()],_.prototype,`_wizardError`,void 0),c([a()],_.prototype,`_wizardCreating`,void 0),c([a()],_.prototype,`_wizardAgentId`,void 0),c([a()],_.prototype,`_wizardAgentName`,void 0),c([a()],_.prototype,`_wizardProvider`,void 0),c([a()],_.prototype,`_wizardModel`,void 0),c([a()],_.prototype,`_wizardToolProfile`,void 0),c([a()],_.prototype,`_catalogProviders`,void 0),_=c([e(`ic-agent-list`)],_);export{_ as IcAgentList};
@@ -1,15 +1,4 @@
1
- import{a as n,b as d,s as l,i as v,t as p}from"./index-CEcM1R_C.js";var m=Object.getOwnPropertyDescriptor,u=(i,a,s,c)=>{for(var e=c>1?void 0:c?m(a,s):a,t=i.length-1,o;t>=0;t--)(o=i[t])&&(e=o(e)||e);return e};let r=class extends n{_navigateToSecurity(){window.location.hash="#security"}render(){return d`
2
- <div class="redirect-container">
3
- <div class="redirect-title">Approvals Moved</div>
4
- <div class="redirect-desc">
5
- Approvals have been merged into the Security view. Use the
6
- "Pending Approvals" and "Approval Rules" tabs to manage approvals.
7
- </div>
8
- <button class="redirect-btn" @click=${()=>this._navigateToSecurity()}>
9
- Go to Security
10
- </button>
11
- </div>
12
- `}};r.styles=[l,v`
1
+ import{c as e,f as t,h as n,l as r,r as i,t as a}from"./decorate-BvWYovGE.js";var o=class extends r{static{this.styles=[i,n`
13
2
  :host {
14
3
  display: block;
15
4
  }
@@ -51,4 +40,15 @@ import{a as n,b as d,s as l,i as v,t as p}from"./index-CEcM1R_C.js";var m=Object
51
40
  .redirect-btn:hover {
52
41
  opacity: 0.9;
53
42
  }
54
- `];r=u([p("ic-approvals-view")],r);export{r as IcApprovalsView};
43
+ `]}_navigateToSecurity(){window.location.hash=`#security`}render(){return t`
44
+ <div class="redirect-container">
45
+ <div class="redirect-title">Approvals Moved</div>
46
+ <div class="redirect-desc">
47
+ Approvals have been merged into the Security view. Use the
48
+ "Pending Approvals" and "Approval Rules" tabs to manage approvals.
49
+ </div>
50
+ <button class="redirect-btn" @click=${()=>this._navigateToSecurity()}>
51
+ Go to Security
52
+ </button>
53
+ </div>
54
+ `}};o=a([e(`ic-approvals-view`)],o);export{o as IcApprovalsView};