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,229 +1,4 @@
1
- import{a as g,I as c,b as n,A as h,s as f,f as _,i as x,n as y,r as p,t as w}from"./index-CEcM1R_C.js";import"./ic-breadcrumb-CUMpp3BL.js";import"./ic-confirm-dialog-CCDbB04e.js";import{e as $,s as C}from"./extract-variables-BM5qyK-s.js";import"./ic-empty-state-60l2ePhd.js";import"./ic-icon-xeGTVhVG.js";var k=Object.defineProperty,A=Object.getOwnPropertyDescriptor,d=(e,t,r,i)=>{for(var s=i>1?void 0:i?A(t,r):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(s=(i?o(t,r,s):o(s))||s);return i&&s&&k(t,r,s),s};const b={draft:"#6b7280",running:"#06b6d4",completed:"#22c55e",failed:"#ef4444",cancelled:"#f97316"};function m(e){if(!e)return"Never";const t=Date.now()-e;if(t<0)return"just now";const r=Math.floor(t/1e3);if(r<60)return"just now";const i=Math.floor(r/60);if(i<60)return`${i}m ago`;const s=Math.floor(i/60);if(s<24)return`${s}h ago`;const a=Math.floor(s/24);return a<30?`${a}d ago`:new Date(e).toISOString().slice(0,10)}let l=class extends g{constructor(){super(...arguments),this.rpcClient=null,this._rpcStatusUnsub=null,this._pipelines=[],this._searchQuery="",this._loading=!0,this._deleteTarget=null,this._sortKey="savedAt",this._sortAsc=!1,this._showVariablePrompt=!1,this._variableNames=[],this._pendingExecuteData=null}get _breadcrumbs(){return[{label:"Pipelines"}]}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),this._rpcStatusUnsub?.(),this._rpcStatusUnsub=null}updated(e){e.has("rpcClient")&&this.rpcClient&&(this._rpcStatusUnsub?.(),this.rpcClient.status==="connected"?this._loadPipelines():this._rpcStatusUnsub=this.rpcClient.onStatusChange(t=>{t==="connected"&&(this._rpcStatusUnsub=null,this._loadPipelines())}))}async _loadPipelines(){this._loading=!0;let e=[],t=[];if(this.rpcClient){const[i,s]=await Promise.allSettled([this.rpcClient.call("graph.list",{limit:100}),this.rpcClient.call("graph.status",{})]);i.status==="fulfilled"&&i.value?.entries&&(e=i.value.entries.map(a=>({id:a.id,label:a.label,source:"saved",nodeCount:a.nodeCount,agentCount:0,savedAt:a.updatedAt,status:"draft"}))),s.status==="fulfilled"&&s.value?.graphs&&(t=s.value.graphs.map(a=>({id:a.graphId,label:a.label??a.graphId,source:"executed",nodeCount:0,agentCount:0,lastRun:a.startedAt,status:a.status,graphId:a.graphId})))}const r=[...e];for(const i of t){const s=r.findIndex(a=>a.label.toLowerCase()===i.label.toLowerCase());if(s>=0){const a=r[s];r[s]={...a,lastRun:i.lastRun,status:i.status,graphId:i.graphId}}else r.push(i)}this._pipelines=r,this._loading=!1}get _filtered(){let e=this._pipelines;if(this._searchQuery){const t=this._searchQuery.toLowerCase();e=e.filter(r=>r.label.toLowerCase().includes(t))}return[...e].sort((t,r)=>{const i=t[this._sortKey],s=r[this._sortKey];if(i==null&&s==null)return 0;if(i==null)return 1;if(s==null)return-1;const a=i<s?-1:i>s?1:0;return this._sortAsc?a:-a})}_navigate(e){this.dispatchEvent(new CustomEvent("navigate",{detail:e,bubbles:!0,composed:!0}))}_handleSort(e){this._sortKey===e?this._sortAsc=!this._sortAsc:(this._sortKey=e,this._sortAsc=e==="label")}_sortArrow(e){return this._sortKey!==e?"":this._sortAsc?"▲":"▼"}_sortArrowClass(e){return this._sortKey===e?"sort-arrow sort-arrow--active":"sort-arrow"}_handleRowClick(e){e.source==="executed"&&e.graphId?this._navigate(`pipelines/${e.graphId}`):this._navigate(`pipelines/${e.id}/edit`)}_handleEdit(e,t){t.stopPropagation(),this._navigate(`pipelines/${e.id}/edit`)}async _handleQuickExecute(e,t){if(t.stopPropagation(),!this.rpcClient){c.show("Not connected to daemon","error");return}let r=null;try{r=await this.rpcClient.call("graph.load",{id:e.id})}catch{c.show("Could not load pipeline from server","error");return}if(!r)return;const i=r.nodes.map(a=>a.task),s=$(i);if(s.length>0){this._pendingExecuteData=r,this._variableNames=s,this._showVariablePrompt=!0;return}await this._executeGraphPayload(r,r.nodes.map(a=>a.task))}async _onVariableConfirm(e){this._showVariablePrompt=!1;const t=this._pendingExecuteData;if(this._pendingExecuteData=null,!t||!this.rpcClient)return;const r=t.nodes.map(i=>C(i.task,e.detail.values));await this._executeGraphPayload(t,r)}async _executeGraphPayload(e,t){if(this.rpcClient)try{const r={nodes:e.nodes.map((a,o)=>({nodeId:a.nodeId??a.id,task:t[o],agentId:a.agentId,dependsOn:a.dependsOn,maxSteps:a.maxSteps,timeoutMs:a.timeoutMs,barrierMode:a.barrierMode,model:a.modelId,retries:a.retries,type_id:a.typeId,type_config:a.typeConfig,context_mode:a.contextMode})),label:e.settings.label,onFailure:e.settings.onFailure,timeoutMs:e.settings.timeoutMs,budget:e.settings.budget};if(e.nodes.some(a=>a.typeId==="approval-gate"))try{const a=await this.rpcClient.call("obs.channels.all"),o=Array.isArray(a)?a:a?.channels??[];o.length>0&&(r._callerChannelType=o[0].channelType,r._callerChannelId=o[0].channelId)}catch{}const s=await this.rpcClient.call("graph.execute",r);s?.graphId?(c.show("Pipeline started","success"),this._navigate(`pipelines/${s.graphId}`)):(c.show("Pipeline started","success"),await this._loadPipelines())}catch(r){c.show(`Failed to execute: ${r instanceof Error?r.message:"Unknown error"}`,"error")}}async _handleDuplicate(e,t){if(t.stopPropagation(),!this.rpcClient){c.show("Not connected to daemon","error");return}let r,i,s;try{const u=await this.rpcClient.call("graph.load",{id:e.id});r=u.nodes,i=u.edges,s=u.settings}catch{c.show("Could not load pipeline from server","error");return}const a=crypto.randomUUID(),o=`${s.label} (copy)`,v={...s,label:o};try{await this.rpcClient.call("graph.save",{id:a,label:o,nodes:r,edges:i,settings:v}),c.show(`Duplicated as "${o}"`,"success"),this._loadPipelines()}catch(u){c.show(`Failed to duplicate: ${u instanceof Error?u.message:"Unknown error"}`,"error")}}_handleDeleteClick(e,t){t.stopPropagation(),this._deleteTarget=e}async _confirmDelete(){if(!this._deleteTarget)return;const e=this._deleteTarget;this._deleteTarget=null;try{await this.rpcClient?.call("graph.delete",{id:e.id}),c.show(`Deleted "${e.label}"`,"success")}catch(t){c.show(`Failed to delete: ${t instanceof Error?t.message:"Unknown error"}`,"error")}this._loadPipelines()}_cancelDelete(){this._deleteTarget=null}_renderStatusDot(e){const t=b[e??"draft"]??b.draft,r=(e??"draft").charAt(0).toUpperCase()+(e??"draft").slice(1);return n`<span class="status-text">
2
- <span
3
- class="status-dot ${e==="running"?"status-dot--running":""}"
4
- style="--dot-color: ${t}"
5
- ></span>
6
- ${r}
7
- </span>`}render(){return n`
8
- <ic-breadcrumb .items=${this._breadcrumbs}></ic-breadcrumb>
9
-
10
- <div class="page-header" role="region" aria-label="Pipelines">
11
- <h1 class="page-title">Pipelines</h1>
12
- <div style="display: flex; gap: 8px; align-items: center;">
13
- <button
14
- class="history-btn"
15
- @click=${()=>this._navigate("pipelines/history")}
16
- >
17
- <ic-icon name="list" size="16px"></ic-icon>
18
- History
19
- </button>
20
- <button
21
- class="create-btn"
22
- @click=${()=>this._navigate("pipelines/new")}
23
- >
24
- <ic-icon name="plus" size="16px"></ic-icon>
25
- New Pipeline
26
- </button>
27
- </div>
28
- </div>
29
-
30
- ${this._renderContent()}
31
- ${this._deleteTarget?n`
32
- <ic-confirm-dialog
33
- open
34
- variant="danger"
35
- title="Delete Pipeline"
36
- message=${`Are you sure you want to delete "${this._deleteTarget.label}"? This cannot be undone.`}
37
- confirmLabel="Delete"
38
- @confirm=${this._confirmDelete}
39
- @cancel=${this._cancelDelete}
40
- ></ic-confirm-dialog>
41
- `:h}
42
- <ic-variable-prompt
43
- ?open=${this._showVariablePrompt}
44
- .variables=${this._variableNames}
45
- .pipelineLabel=${this._pendingExecuteData?.settings.label??""}
46
- @confirm=${this._onVariableConfirm}
47
- @cancel=${()=>{this._showVariablePrompt=!1,this._pendingExecuteData=null}}
48
- ></ic-variable-prompt>
49
- `}_renderContent(){if(this._loading)return n`<ic-skeleton-view variant="list"></ic-skeleton-view>`;if(this._pipelines.length===0)return n`
50
- <ic-empty-state
51
- icon="git-branch"
52
- message="No pipelines created"
53
- description="Build an execution graph to orchestrate multi-agent workflows."
54
- >
55
- <button
56
- class="create-btn"
57
- @click=${()=>this._navigate("pipelines/new")}
58
- >
59
- <ic-icon name="plus" size="16px"></ic-icon>
60
- New Pipeline
61
- </button>
62
- </ic-empty-state>
63
- `;const e=this._filtered;return n`
64
- <div class="search-bar">
65
- <input
66
- class="search-input"
67
- type="search"
68
- placeholder="Search pipelines..."
69
- .value=${this._searchQuery}
70
- @input=${t=>{this._searchQuery=t.target.value}}
71
- />
72
- </div>
73
-
74
- ${e.length===0?n`<div class="no-results">No pipelines match your search.</div>`:n`
75
- ${this._renderTable(e)} ${this._renderMobileList(e)}
76
- `}
77
- `}_renderTable(e){return n`
78
- <div class="grid-table" role="table">
79
- <div class="grid-header" role="row">
80
- <div
81
- class="cell"
82
- role="columnheader"
83
- @click=${()=>this._handleSort("label")}
84
- >
85
- Name
86
- <span class=${this._sortArrowClass("label")}
87
- >${this._sortArrow("label")}</span
88
- >
89
- </div>
90
- <div
91
- class="cell"
92
- role="columnheader"
93
- @click=${()=>this._handleSort("nodeCount")}
94
- >
95
- Nodes
96
- <span class=${this._sortArrowClass("nodeCount")}
97
- >${this._sortArrow("nodeCount")}</span
98
- >
99
- </div>
100
- <div
101
- class="cell"
102
- role="columnheader"
103
- @click=${()=>this._handleSort("agentCount")}
104
- >
105
- Agents
106
- <span class=${this._sortArrowClass("agentCount")}
107
- >${this._sortArrow("agentCount")}</span
108
- >
109
- </div>
110
- <div
111
- class="cell"
112
- role="columnheader"
113
- @click=${()=>this._handleSort("status")}
114
- >
115
- Status
116
- <span class=${this._sortArrowClass("status")}
117
- >${this._sortArrow("status")}</span
118
- >
119
- </div>
120
- <div
121
- class="cell"
122
- role="columnheader"
123
- @click=${()=>this._handleSort("savedAt")}
124
- >
125
- Last Run
126
- <span class=${this._sortArrowClass("savedAt")}
127
- >${this._sortArrow("savedAt")}</span
128
- >
129
- </div>
130
- <div class="cell actions-header" role="columnheader">Actions</div>
131
- </div>
132
- ${e.map(t=>this._renderRow(t))}
133
- </div>
134
- `}_renderRow(e){const t=m(e.lastRun??e.savedAt);return n`
135
- <div
136
- class="grid-row"
137
- role="row"
138
- @click=${()=>this._handleRowClick(e)}
139
- >
140
- <div class="cell" role="cell">
141
- <span class=${"pipeline-label"}>${e.label}</span>
142
- </div>
143
- <div class="cell" role="cell">${e.nodeCount}</div>
144
- <div class="cell" role="cell">${e.agentCount}</div>
145
- <div class="cell" role="cell">
146
- ${this._renderStatusDot(e.status)}
147
- </div>
148
- <div class="cell dim-text" role="cell">${t}</div>
149
- <div class="cell actions-cell" role="cell">
150
- <button
151
- class="action-btn"
152
- aria-label="Edit ${e.label}"
153
- @click=${i=>this._handleEdit(e,i)}
154
- >
155
- <ic-icon name="edit" size="16px"></ic-icon>
156
- </button>
157
- ${e.source==="saved"?n`
158
- <button
159
- class="action-btn action-btn--run"
160
- aria-label="Run ${e.label}"
161
- @click=${i=>this._handleQuickExecute(e,i)}
162
- >
163
- <ic-icon name="play" size="16px"></ic-icon>
164
- </button>
165
- <button
166
- class="action-btn"
167
- aria-label="Duplicate ${e.label}"
168
- @click=${i=>this._handleDuplicate(e,i)}
169
- >
170
- <ic-icon name="copy" size="16px"></ic-icon>
171
- </button>
172
- <button
173
- class="action-btn action-btn--danger"
174
- aria-label="Delete ${e.label}"
175
- @click=${i=>this._handleDeleteClick(e,i)}
176
- >
177
- <ic-icon name="trash" size="16px"></ic-icon>
178
- </button>
179
- `:h}
180
- </div>
181
- </div>
182
- `}_renderMobileList(e){return n`
183
- <div class="mobile-list">
184
- ${e.map(t=>n`
185
- <div
186
- class="mobile-card"
187
- @click=${()=>this._handleRowClick(t)}
188
- >
189
- <div class="card-header">
190
- <span class="card-label">${t.label}</span>
191
- ${this._renderStatusDot(t.status)}
192
- </div>
193
- <div class="card-meta">
194
- <span>${t.nodeCount} nodes</span>
195
- <span>${t.agentCount} agents</span>
196
- <span>${m(t.lastRun??t.savedAt)}</span>
197
- </div>
198
- <div class="card-actions">
199
- <button
200
- class="action-btn"
201
- aria-label="Edit ${t.label}"
202
- @click=${r=>this._handleEdit(t,r)}
203
- >
204
- <ic-icon name="edit" size="16px"></ic-icon>
205
- </button>
206
- ${t.source==="saved"?n`
207
- <button
208
- class="action-btn action-btn--run"
209
- aria-label="Run ${t.label}"
210
- @click=${r=>this._handleQuickExecute(t,r)}
211
- >
212
- <ic-icon name="play" size="16px"></ic-icon>
213
- </button>
214
- <button
215
- class="action-btn action-btn--danger"
216
- aria-label="Delete ${t.label}"
217
- @click=${r=>this._handleDeleteClick(t,r)}
218
- >
219
- <ic-icon name="trash" size="16px"></ic-icon>
220
- </button>
221
- `:h}
222
- </div>
223
- </div>
224
- `)}
225
- </div>
226
- `}};l.styles=[f,_,x`
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}from"./index-BBkuC-EU.js";import"./ic-breadcrumb-DqN6G3gc.js";import"./ic-confirm-dialog-DGlPbV1T.js";import"./ic-icon-BGNCCPpZ.js";import"./ic-empty-state-CM3Wbj2f.js";import{n as d,t as f}from"./extract-variables-B7-Doo7l.js";var p={draft:`#6b7280`,running:`#06b6d4`,completed:`#22c55e`,failed:`#ef4444`,cancelled:`#f97316`};function m(e){if(!e)return`Never`;let t=Date.now()-e;if(t<0)return`just now`;let n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);if(i<24)return`${i}h ago`;let a=Math.floor(i/24);return a<30?`${a}d ago`:new Date(e).toISOString().slice(0,10)}var h=class extends r{constructor(...e){super(...e),this.rpcClient=null,this._rpcStatusUnsub=null,this._pipelines=[],this._searchQuery=``,this._loading=!0,this._deleteTarget=null,this._sortKey=`savedAt`,this._sortAsc=!1,this._showVariablePrompt=!1,this._variableNames=[],this._pendingExecuteData=null}static{this.styles=[o,i,n`
227
2
  :host {
228
3
  display: block;
229
4
  }
@@ -515,4 +290,229 @@ import{a as g,I as c,b as n,A as h,s as f,f as _,i as x,n as y,r as p,t as w}fro
515
290
  color: var(--ic-text-dim, #6b7280);
516
291
  font-size: var(--ic-text-sm, 0.875rem);
517
292
  }
518
- `];d([y({attribute:!1})],l.prototype,"rpcClient",2);d([p()],l.prototype,"_pipelines",2);d([p()],l.prototype,"_searchQuery",2);d([p()],l.prototype,"_loading",2);d([p()],l.prototype,"_deleteTarget",2);d([p()],l.prototype,"_sortKey",2);d([p()],l.prototype,"_sortAsc",2);d([p()],l.prototype,"_showVariablePrompt",2);d([p()],l.prototype,"_variableNames",2);d([p()],l.prototype,"_pendingExecuteData",2);l=d([w("ic-pipeline-list")],l);export{l as IcPipelineList};
293
+ `]}get _breadcrumbs(){return[{label:`Pipelines`}]}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),this._rpcStatusUnsub?.(),this._rpcStatusUnsub=null}updated(e){e.has(`rpcClient`)&&this.rpcClient&&(this._rpcStatusUnsub?.(),this.rpcClient.status===`connected`?this._loadPipelines():this._rpcStatusUnsub=this.rpcClient.onStatusChange(e=>{e===`connected`&&(this._rpcStatusUnsub=null,this._loadPipelines())}))}async _loadPipelines(){this._loading=!0;let e=[],t=[];if(this.rpcClient){let[n,r]=await Promise.allSettled([this.rpcClient.call(`graph.list`,{limit:100}),this.rpcClient.call(`graph.status`,{})]);n.status===`fulfilled`&&n.value?.entries&&(e=n.value.entries.map(e=>({id:e.id,label:e.label,source:`saved`,nodeCount:e.nodeCount,agentCount:0,savedAt:e.updatedAt,status:`draft`}))),r.status===`fulfilled`&&r.value?.graphs&&(t=r.value.graphs.map(e=>({id:e.graphId,label:e.label??e.graphId,source:`executed`,nodeCount:0,agentCount:0,lastRun:e.startedAt,status:e.status,graphId:e.graphId})))}let n=[...e];for(let e of t){let t=n.findIndex(t=>t.label.toLowerCase()===e.label.toLowerCase());t>=0?n[t]={...n[t],lastRun:e.lastRun,status:e.status,graphId:e.graphId}:n.push(e)}this._pipelines=n,this._loading=!1}get _filtered(){let e=this._pipelines;if(this._searchQuery){let t=this._searchQuery.toLowerCase();e=e.filter(e=>e.label.toLowerCase().includes(t))}return[...e].sort((e,t)=>{let n=e[this._sortKey],r=t[this._sortKey];if(n==null&&r==null)return 0;if(n==null)return 1;if(r==null)return-1;let i=n<r?-1:+(n>r);return this._sortAsc?i:-i})}_navigate(e){this.dispatchEvent(new CustomEvent(`navigate`,{detail:e,bubbles:!0,composed:!0}))}_handleSort(e){this._sortKey===e?this._sortAsc=!this._sortAsc:(this._sortKey=e,this._sortAsc=e===`label`)}_sortArrow(e){return this._sortKey===e?this._sortAsc?`▲`:`▼`:``}_sortArrowClass(e){return this._sortKey===e?`sort-arrow sort-arrow--active`:`sort-arrow`}_handleRowClick(e){e.source===`executed`&&e.graphId?this._navigate(`pipelines/${e.graphId}`):this._navigate(`pipelines/${e.id}/edit`)}_handleEdit(e,t){t.stopPropagation(),this._navigate(`pipelines/${e.id}/edit`)}async _handleQuickExecute(e,t){if(t.stopPropagation(),!this.rpcClient){u.show(`Not connected to daemon`,`error`);return}let n=null;try{n=await this.rpcClient.call(`graph.load`,{id:e.id})}catch{u.show(`Could not load pipeline from server`,`error`);return}if(!n)return;let r=f(n.nodes.map(e=>e.task));if(r.length>0){this._pendingExecuteData=n,this._variableNames=r,this._showVariablePrompt=!0;return}await this._executeGraphPayload(n,n.nodes.map(e=>e.task))}async _onVariableConfirm(e){this._showVariablePrompt=!1;let t=this._pendingExecuteData;if(this._pendingExecuteData=null,!t||!this.rpcClient)return;let n=t.nodes.map(t=>d(t.task,e.detail.values));await this._executeGraphPayload(t,n)}async _executeGraphPayload(e,t){if(this.rpcClient)try{let n={nodes:e.nodes.map((e,n)=>({nodeId:e.nodeId??e.id,task:t[n],agentId:e.agentId,dependsOn:e.dependsOn,maxSteps:e.maxSteps,timeoutMs:e.timeoutMs,barrierMode:e.barrierMode,model:e.modelId,retries:e.retries,type_id:e.typeId,type_config:e.typeConfig,context_mode:e.contextMode})),label:e.settings.label,onFailure:e.settings.onFailure,timeoutMs:e.settings.timeoutMs,budget:e.settings.budget};if(e.nodes.some(e=>e.typeId===`approval-gate`))try{let e=await this.rpcClient.call(`obs.channels.all`),t=Array.isArray(e)?e:e?.channels??[];t.length>0&&(n._callerChannelType=t[0].channelType,n._callerChannelId=t[0].channelId)}catch{}let r=await this.rpcClient.call(`graph.execute`,n);r?.graphId?(u.show(`Pipeline started`,`success`),this._navigate(`pipelines/${r.graphId}`)):(u.show(`Pipeline started`,`success`),await this._loadPipelines())}catch(e){u.show(`Failed to execute: ${e instanceof Error?e.message:`Unknown error`}`,`error`)}}async _handleDuplicate(e,t){if(t.stopPropagation(),!this.rpcClient){u.show(`Not connected to daemon`,`error`);return}let n,r,i;try{let t=await this.rpcClient.call(`graph.load`,{id:e.id});n=t.nodes,r=t.edges,i=t.settings}catch{u.show(`Could not load pipeline from server`,`error`);return}let a=crypto.randomUUID(),o=`${i.label} (copy)`,s={...i,label:o};try{await this.rpcClient.call(`graph.save`,{id:a,label:o,nodes:n,edges:r,settings:s}),u.show(`Duplicated as "${o}"`,`success`),this._loadPipelines()}catch(e){u.show(`Failed to duplicate: ${e instanceof Error?e.message:`Unknown error`}`,`error`)}}_handleDeleteClick(e,t){t.stopPropagation(),this._deleteTarget=e}async _confirmDelete(){if(!this._deleteTarget)return;let e=this._deleteTarget;this._deleteTarget=null;try{await this.rpcClient?.call(`graph.delete`,{id:e.id}),u.show(`Deleted "${e.label}"`,`success`)}catch(e){u.show(`Failed to delete: ${e instanceof Error?e.message:`Unknown error`}`,`error`)}this._loadPipelines()}_cancelDelete(){this._deleteTarget=null}_renderStatusDot(e){let n=p[e??`draft`]??p.draft,r=(e??`draft`).charAt(0).toUpperCase()+(e??`draft`).slice(1);return t`<span class="status-text">
294
+ <span
295
+ class="status-dot ${e===`running`?`status-dot--running`:``}"
296
+ style="--dot-color: ${n}"
297
+ ></span>
298
+ ${r}
299
+ </span>`}render(){return t`
300
+ <ic-breadcrumb .items=${this._breadcrumbs}></ic-breadcrumb>
301
+
302
+ <div class="page-header" role="region" aria-label="Pipelines">
303
+ <h1 class="page-title">Pipelines</h1>
304
+ <div style="display: flex; gap: 8px; align-items: center;">
305
+ <button
306
+ class="history-btn"
307
+ @click=${()=>this._navigate(`pipelines/history`)}
308
+ >
309
+ <ic-icon name="list" size="16px"></ic-icon>
310
+ History
311
+ </button>
312
+ <button
313
+ class="create-btn"
314
+ @click=${()=>this._navigate(`pipelines/new`)}
315
+ >
316
+ <ic-icon name="plus" size="16px"></ic-icon>
317
+ New Pipeline
318
+ </button>
319
+ </div>
320
+ </div>
321
+
322
+ ${this._renderContent()}
323
+ ${this._deleteTarget?t`
324
+ <ic-confirm-dialog
325
+ open
326
+ variant="danger"
327
+ title="Delete Pipeline"
328
+ message=${`Are you sure you want to delete "${this._deleteTarget.label}"? This cannot be undone.`}
329
+ confirmLabel="Delete"
330
+ @confirm=${this._confirmDelete}
331
+ @cancel=${this._cancelDelete}
332
+ ></ic-confirm-dialog>
333
+ `:l}
334
+ <ic-variable-prompt
335
+ ?open=${this._showVariablePrompt}
336
+ .variables=${this._variableNames}
337
+ .pipelineLabel=${this._pendingExecuteData?.settings.label??``}
338
+ @confirm=${this._onVariableConfirm}
339
+ @cancel=${()=>{this._showVariablePrompt=!1,this._pendingExecuteData=null}}
340
+ ></ic-variable-prompt>
341
+ `}_renderContent(){if(this._loading)return t`<ic-skeleton-view variant="list"></ic-skeleton-view>`;if(this._pipelines.length===0)return t`
342
+ <ic-empty-state
343
+ icon="git-branch"
344
+ message="No pipelines created"
345
+ description="Build an execution graph to orchestrate multi-agent workflows."
346
+ >
347
+ <button
348
+ class="create-btn"
349
+ @click=${()=>this._navigate(`pipelines/new`)}
350
+ >
351
+ <ic-icon name="plus" size="16px"></ic-icon>
352
+ New Pipeline
353
+ </button>
354
+ </ic-empty-state>
355
+ `;let e=this._filtered;return t`
356
+ <div class="search-bar">
357
+ <input
358
+ class="search-input"
359
+ type="search"
360
+ placeholder="Search pipelines..."
361
+ .value=${this._searchQuery}
362
+ @input=${e=>{this._searchQuery=e.target.value}}
363
+ />
364
+ </div>
365
+
366
+ ${e.length===0?t`<div class="no-results">No pipelines match your search.</div>`:t`
367
+ ${this._renderTable(e)} ${this._renderMobileList(e)}
368
+ `}
369
+ `}_renderTable(e){return t`
370
+ <div class="grid-table" role="table">
371
+ <div class="grid-header" role="row">
372
+ <div
373
+ class="cell"
374
+ role="columnheader"
375
+ @click=${()=>this._handleSort(`label`)}
376
+ >
377
+ Name
378
+ <span class=${this._sortArrowClass(`label`)}
379
+ >${this._sortArrow(`label`)}</span
380
+ >
381
+ </div>
382
+ <div
383
+ class="cell"
384
+ role="columnheader"
385
+ @click=${()=>this._handleSort(`nodeCount`)}
386
+ >
387
+ Nodes
388
+ <span class=${this._sortArrowClass(`nodeCount`)}
389
+ >${this._sortArrow(`nodeCount`)}</span
390
+ >
391
+ </div>
392
+ <div
393
+ class="cell"
394
+ role="columnheader"
395
+ @click=${()=>this._handleSort(`agentCount`)}
396
+ >
397
+ Agents
398
+ <span class=${this._sortArrowClass(`agentCount`)}
399
+ >${this._sortArrow(`agentCount`)}</span
400
+ >
401
+ </div>
402
+ <div
403
+ class="cell"
404
+ role="columnheader"
405
+ @click=${()=>this._handleSort(`status`)}
406
+ >
407
+ Status
408
+ <span class=${this._sortArrowClass(`status`)}
409
+ >${this._sortArrow(`status`)}</span
410
+ >
411
+ </div>
412
+ <div
413
+ class="cell"
414
+ role="columnheader"
415
+ @click=${()=>this._handleSort(`savedAt`)}
416
+ >
417
+ Last Run
418
+ <span class=${this._sortArrowClass(`savedAt`)}
419
+ >${this._sortArrow(`savedAt`)}</span
420
+ >
421
+ </div>
422
+ <div class="cell actions-header" role="columnheader">Actions</div>
423
+ </div>
424
+ ${e.map(e=>this._renderRow(e))}
425
+ </div>
426
+ `}_renderRow(e){let n=m(e.lastRun??e.savedAt);return t`
427
+ <div
428
+ class="grid-row"
429
+ role="row"
430
+ @click=${()=>this._handleRowClick(e)}
431
+ >
432
+ <div class="cell" role="cell">
433
+ <span class=${`pipeline-label`}>${e.label}</span>
434
+ </div>
435
+ <div class="cell" role="cell">${e.nodeCount}</div>
436
+ <div class="cell" role="cell">${e.agentCount}</div>
437
+ <div class="cell" role="cell">
438
+ ${this._renderStatusDot(e.status)}
439
+ </div>
440
+ <div class="cell dim-text" role="cell">${n}</div>
441
+ <div class="cell actions-cell" role="cell">
442
+ <button
443
+ class="action-btn"
444
+ aria-label="Edit ${e.label}"
445
+ @click=${t=>this._handleEdit(e,t)}
446
+ >
447
+ <ic-icon name="edit" size="16px"></ic-icon>
448
+ </button>
449
+ ${e.source===`saved`?t`
450
+ <button
451
+ class="action-btn action-btn--run"
452
+ aria-label="Run ${e.label}"
453
+ @click=${t=>this._handleQuickExecute(e,t)}
454
+ >
455
+ <ic-icon name="play" size="16px"></ic-icon>
456
+ </button>
457
+ <button
458
+ class="action-btn"
459
+ aria-label="Duplicate ${e.label}"
460
+ @click=${t=>this._handleDuplicate(e,t)}
461
+ >
462
+ <ic-icon name="copy" size="16px"></ic-icon>
463
+ </button>
464
+ <button
465
+ class="action-btn action-btn--danger"
466
+ aria-label="Delete ${e.label}"
467
+ @click=${t=>this._handleDeleteClick(e,t)}
468
+ >
469
+ <ic-icon name="trash" size="16px"></ic-icon>
470
+ </button>
471
+ `:l}
472
+ </div>
473
+ </div>
474
+ `}_renderMobileList(e){return t`
475
+ <div class="mobile-list">
476
+ ${e.map(e=>t`
477
+ <div
478
+ class="mobile-card"
479
+ @click=${()=>this._handleRowClick(e)}
480
+ >
481
+ <div class="card-header">
482
+ <span class="card-label">${e.label}</span>
483
+ ${this._renderStatusDot(e.status)}
484
+ </div>
485
+ <div class="card-meta">
486
+ <span>${e.nodeCount} nodes</span>
487
+ <span>${e.agentCount} agents</span>
488
+ <span>${m(e.lastRun??e.savedAt)}</span>
489
+ </div>
490
+ <div class="card-actions">
491
+ <button
492
+ class="action-btn"
493
+ aria-label="Edit ${e.label}"
494
+ @click=${t=>this._handleEdit(e,t)}
495
+ >
496
+ <ic-icon name="edit" size="16px"></ic-icon>
497
+ </button>
498
+ ${e.source===`saved`?t`
499
+ <button
500
+ class="action-btn action-btn--run"
501
+ aria-label="Run ${e.label}"
502
+ @click=${t=>this._handleQuickExecute(e,t)}
503
+ >
504
+ <ic-icon name="play" size="16px"></ic-icon>
505
+ </button>
506
+ <button
507
+ class="action-btn action-btn--danger"
508
+ aria-label="Delete ${e.label}"
509
+ @click=${t=>this._handleDeleteClick(e,t)}
510
+ >
511
+ <ic-icon name="trash" size="16px"></ic-icon>
512
+ </button>
513
+ `:l}
514
+ </div>
515
+ </div>
516
+ `)}
517
+ </div>
518
+ `}};c([s({attribute:!1})],h.prototype,`rpcClient`,void 0),c([a()],h.prototype,`_pipelines`,void 0),c([a()],h.prototype,`_searchQuery`,void 0),c([a()],h.prototype,`_loading`,void 0),c([a()],h.prototype,`_deleteTarget`,void 0),c([a()],h.prototype,`_sortKey`,void 0),c([a()],h.prototype,`_sortAsc`,void 0),c([a()],h.prototype,`_showVariablePrompt`,void 0),c([a()],h.prototype,`_variableNames`,void 0),c([a()],h.prototype,`_pendingExecuteData`,void 0),h=c([e(`ic-pipeline-list`)],h);export{h as IcPipelineList};