comisai 1.0.16 → 1.0.17

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 (90) hide show
  1. package/node_modules/@comis/agent/package.json +1 -1
  2. package/node_modules/@comis/channels/package.json +1 -1
  3. package/node_modules/@comis/cli/dist/wizard/non-interactive.js +1 -0
  4. package/node_modules/@comis/cli/dist/wizard/steps/01-detect-existing.js +4 -0
  5. package/node_modules/@comis/cli/dist/wizard/steps/07-gateway.js +9 -0
  6. package/node_modules/@comis/cli/dist/wizard/steps/10-write-config.js +2 -0
  7. package/node_modules/@comis/cli/dist/wizard/steps/12-finish.js +5 -2
  8. package/node_modules/@comis/cli/dist/wizard/types.d.ts +1 -0
  9. package/node_modules/@comis/cli/package.json +1 -1
  10. package/node_modules/@comis/core/dist/config/schema-gateway.d.ts +17 -2
  11. package/node_modules/@comis/core/dist/config/schema-gateway.js +11 -0
  12. package/node_modules/@comis/core/dist/config/schema.d.ts +60 -57
  13. package/node_modules/@comis/core/package.json +1 -1
  14. package/node_modules/@comis/daemon/dist/wiring/setup-gateway.js +34 -6
  15. package/node_modules/@comis/daemon/package.json +1 -1
  16. package/node_modules/@comis/gateway/package.json +1 -1
  17. package/node_modules/@comis/infra/package.json +1 -1
  18. package/node_modules/@comis/memory/package.json +1 -1
  19. package/node_modules/@comis/scheduler/package.json +1 -1
  20. package/node_modules/@comis/shared/package.json +1 -1
  21. package/node_modules/@comis/skills/package.json +1 -1
  22. package/node_modules/@comis/web/dist/android-chrome-192x192.png +0 -0
  23. package/node_modules/@comis/web/dist/android-chrome-512x512.png +0 -0
  24. package/node_modules/@comis/web/dist/apple-touch-icon.png +0 -0
  25. package/node_modules/@comis/web/dist/assets/agent-detail-BG9MGWWj.js +615 -0
  26. package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +2173 -0
  27. package/node_modules/@comis/web/dist/assets/agent-list-LHCJ4rw2.js +504 -0
  28. package/node_modules/@comis/web/dist/assets/approvals-q9VH_IKr.js +54 -0
  29. package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +375 -0
  30. package/node_modules/@comis/web/dist/assets/channel-detail-CaInesJM.js +681 -0
  31. package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +323 -0
  32. package/node_modules/@comis/web/dist/assets/chat-console-CNmzl0JW.js +943 -0
  33. package/node_modules/@comis/web/dist/assets/config-editor-DX4ITw6y.js +1374 -0
  34. package/node_modules/@comis/web/dist/assets/context-dag-browser-BwiaF5tf.js +393 -0
  35. package/node_modules/@comis/web/dist/assets/context-engine-BZ5Am6hA.js +393 -0
  36. package/node_modules/@comis/web/dist/assets/delivery-view-OfBZof-m.js +392 -0
  37. package/node_modules/@comis/web/dist/assets/diagnostics-view-YFwCxgr2.js +231 -0
  38. package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +1 -0
  39. package/node_modules/@comis/web/dist/assets/extract-variables-BM5qyK-s.js +149 -0
  40. package/node_modules/@comis/web/dist/assets/ic-array-editor-B7m6x7-S.js +118 -0
  41. package/node_modules/@comis/web/dist/assets/ic-breadcrumb-CUMpp3BL.js +75 -0
  42. package/node_modules/@comis/web/dist/assets/ic-budget-segment-bar-BtJ6x5mN.js +64 -0
  43. package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +352 -0
  44. package/node_modules/@comis/web/dist/assets/ic-confirm-dialog-CCDbB04e.js +110 -0
  45. package/node_modules/@comis/web/dist/assets/ic-connection-dot-CnT1b8xr.js +54 -0
  46. package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +277 -0
  47. package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +67 -0
  48. package/node_modules/@comis/web/dist/assets/ic-detail-panel-BF83r-if.js +116 -0
  49. package/node_modules/@comis/web/dist/assets/ic-empty-state-60l2ePhd.js +52 -0
  50. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +359 -0
  51. package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +33 -0
  52. package/node_modules/@comis/web/dist/assets/ic-layer-waterfall-COvEYMg5.js +69 -0
  53. package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +12 -0
  54. package/node_modules/@comis/web/dist/assets/ic-search-input-CSOxY9g7.js +92 -0
  55. package/node_modules/@comis/web/dist/assets/ic-select-Ce-Raudx.js +127 -0
  56. package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +95 -0
  57. package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +33 -0
  58. package/node_modules/@comis/web/dist/assets/ic-time-range-picker-CypCT68y.js +93 -0
  59. package/node_modules/@comis/web/dist/assets/ic-tool-call-7MaXSsCW.js +146 -0
  60. package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +2830 -0
  61. package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +1 -0
  62. package/node_modules/@comis/web/dist/assets/mcp-management-BNZPnpDn.js +582 -0
  63. package/node_modules/@comis/web/dist/assets/media-config-BBvTYxOX.js +314 -0
  64. package/node_modules/@comis/web/dist/assets/media-test-BkK3RCRK.js +496 -0
  65. package/node_modules/@comis/web/dist/assets/memory-inspector-1hDGCGat.js +1139 -0
  66. package/node_modules/@comis/web/dist/assets/message-center-CXefwsUu.js +785 -0
  67. package/node_modules/@comis/web/dist/assets/models-C1qcU_j3.js +894 -0
  68. package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +1 -0
  69. package/node_modules/@comis/web/dist/assets/observe-view-C0VBhX4C.js +814 -0
  70. package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +1496 -0
  71. package/node_modules/@comis/web/dist/assets/pipeline-history-DkfOQ6SW.js +317 -0
  72. package/node_modules/@comis/web/dist/assets/pipeline-history-detail-hyHgD0ai.js +287 -0
  73. package/node_modules/@comis/web/dist/assets/pipeline-list-BPW8hV-q.js +518 -0
  74. package/node_modules/@comis/web/dist/assets/pipeline-monitor-Bip16T7e.js +972 -0
  75. package/node_modules/@comis/web/dist/assets/scheduler-BGgwKd06.js +1182 -0
  76. package/node_modules/@comis/web/dist/assets/security-D15st4xx.js +1224 -0
  77. package/node_modules/@comis/web/dist/assets/session-detail-SGEYNJ0M.js +632 -0
  78. package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +1 -0
  79. package/node_modules/@comis/web/dist/assets/session-list-6ybUTxbY.js +231 -0
  80. package/node_modules/@comis/web/dist/assets/setup-wizard-nT0tz9QP.js +853 -0
  81. package/node_modules/@comis/web/dist/assets/skills-D8yVfSUy.js +1051 -0
  82. package/node_modules/@comis/web/dist/assets/subagents-HHXMeHYo.js +193 -0
  83. package/node_modules/@comis/web/dist/assets/workspace-manager-BQlr10iH.js +785 -0
  84. package/node_modules/@comis/web/dist/comis-logo.png +0 -0
  85. package/node_modules/@comis/web/dist/favicon-16x16.png +0 -0
  86. package/node_modules/@comis/web/dist/favicon-32x32.png +0 -0
  87. package/node_modules/@comis/web/dist/favicon.ico +0 -0
  88. package/node_modules/@comis/web/dist/index.html +17 -0
  89. package/node_modules/@comis/web/package.json +29 -0
  90. package/package.json +15 -13
@@ -0,0 +1,518 @@
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`
227
+ :host {
228
+ display: block;
229
+ }
230
+
231
+ .page-header {
232
+ display: flex;
233
+ justify-content: space-between;
234
+ align-items: center;
235
+ margin-bottom: var(--ic-space-lg, 1.5rem);
236
+ }
237
+
238
+ .page-title {
239
+ font-size: var(--ic-text-2xl, 1.5rem);
240
+ font-weight: 700;
241
+ margin: 0;
242
+ }
243
+
244
+ .create-btn {
245
+ display: inline-flex;
246
+ align-items: center;
247
+ gap: var(--ic-space-xs, 0.25rem);
248
+ padding: var(--ic-space-sm, 0.5rem) var(--ic-space-md, 0.75rem);
249
+ background: var(--ic-accent, #3b82f6);
250
+ color: #fff;
251
+ border: none;
252
+ border-radius: var(--ic-radius-md, 0.5rem);
253
+ font-size: var(--ic-text-sm, 0.875rem);
254
+ font-weight: 500;
255
+ font-family: inherit;
256
+ cursor: pointer;
257
+ transition: background var(--ic-transition, 150ms ease);
258
+ }
259
+
260
+ .create-btn:hover {
261
+ background: var(--ic-accent-hover, #2563eb);
262
+ }
263
+
264
+ .history-btn {
265
+ display: inline-flex;
266
+ align-items: center;
267
+ gap: var(--ic-space-xs, 0.25rem);
268
+ padding: var(--ic-space-sm, 0.5rem) var(--ic-space-md, 0.75rem);
269
+ background: transparent;
270
+ color: var(--ic-text-dim, #6b7280);
271
+ border: 1px solid var(--ic-border, #374151);
272
+ border-radius: var(--ic-radius-md, 0.5rem);
273
+ font-size: var(--ic-text-sm, 0.875rem);
274
+ font-weight: 500;
275
+ font-family: inherit;
276
+ cursor: pointer;
277
+ transition: color var(--ic-transition, 150ms ease),
278
+ border-color var(--ic-transition, 150ms ease);
279
+ }
280
+
281
+ .history-btn:hover {
282
+ color: var(--ic-text, #f3f4f6);
283
+ border-color: var(--ic-text-dim, #6b7280);
284
+ }
285
+
286
+ /* Search bar */
287
+ .search-bar {
288
+ margin-bottom: var(--ic-space-md, 0.75rem);
289
+ }
290
+
291
+ .search-input {
292
+ width: 100%;
293
+ max-width: 320px;
294
+ padding: 8px 12px;
295
+ background: var(--ic-surface-2, #1f2937);
296
+ border: 1px solid var(--ic-border, #374151);
297
+ border-radius: var(--ic-radius-md, 0.5rem);
298
+ color: var(--ic-text, #f3f4f6);
299
+ font-size: var(--ic-text-sm, 0.875rem);
300
+ font-family: inherit;
301
+ }
302
+
303
+ .search-input:focus {
304
+ border-color: var(--ic-accent, #3b82f6);
305
+ outline: none;
306
+ }
307
+
308
+ .search-input::placeholder {
309
+ color: var(--ic-text-dim, #6b7280);
310
+ }
311
+
312
+ /* Grid-based table - 6 columns */
313
+ .grid-table {
314
+ display: grid;
315
+ grid-template-columns: minmax(140px, 2fr) 70px 70px 110px 120px auto;
316
+ width: 100%;
317
+ }
318
+
319
+ .grid-header {
320
+ display: contents;
321
+ }
322
+
323
+ .grid-header .cell {
324
+ font-size: var(--ic-text-xs, 0.75rem);
325
+ font-weight: 600;
326
+ text-transform: uppercase;
327
+ letter-spacing: 0.05em;
328
+ color: var(--ic-text-dim, #6b7280);
329
+ padding: var(--ic-space-sm, 0.5rem) var(--ic-space-md, 0.75rem);
330
+ border-bottom: 1px solid var(--ic-border, #374151);
331
+ cursor: pointer;
332
+ user-select: none;
333
+ white-space: nowrap;
334
+ }
335
+
336
+ .grid-header .cell:hover {
337
+ color: var(--ic-text-muted, #9ca3af);
338
+ }
339
+
340
+ .grid-header .cell.actions-header {
341
+ cursor: default;
342
+ text-align: right;
343
+ }
344
+
345
+ .grid-header .cell.actions-header:hover {
346
+ color: var(--ic-text-dim, #6b7280);
347
+ }
348
+
349
+ .sort-arrow {
350
+ display: inline-block;
351
+ margin-left: 4px;
352
+ font-size: 0.625rem;
353
+ opacity: 0.5;
354
+ }
355
+
356
+ .sort-arrow--active {
357
+ opacity: 1;
358
+ color: var(--ic-accent, #3b82f6);
359
+ }
360
+
361
+ .grid-row {
362
+ display: contents;
363
+ cursor: pointer;
364
+ }
365
+
366
+ .grid-row .cell {
367
+ padding: var(--ic-space-sm, 0.5rem) var(--ic-space-md, 0.75rem);
368
+ border-bottom: 1px solid var(--ic-border, #374151);
369
+ font-size: var(--ic-text-sm, 0.875rem);
370
+ display: flex;
371
+ align-items: center;
372
+ transition: background var(--ic-transition, 150ms ease);
373
+ }
374
+
375
+ .grid-row:hover .cell {
376
+ background: var(--ic-surface-2, #1f2937);
377
+ }
378
+
379
+ .grid-row .cell.actions-cell {
380
+ justify-content: flex-end;
381
+ white-space: nowrap;
382
+ }
383
+
384
+ .pipeline-label {
385
+ font-weight: 500;
386
+ color: var(--ic-text, #f3f4f6);
387
+ }
388
+
389
+ .pipeline-label--draft {
390
+ font-weight: 600;
391
+ }
392
+
393
+ /* Status dot */
394
+ .status-dot {
395
+ display: inline-block;
396
+ width: 8px;
397
+ height: 8px;
398
+ border-radius: 50%;
399
+ background: var(--dot-color, #6b7280);
400
+ margin-right: 6px;
401
+ vertical-align: middle;
402
+ flex-shrink: 0;
403
+ }
404
+
405
+ .status-dot--running {
406
+ animation: pulse 1.5s ease-in-out infinite;
407
+ }
408
+
409
+ @keyframes pulse {
410
+ 0%,
411
+ 100% {
412
+ opacity: 1;
413
+ }
414
+ 50% {
415
+ opacity: 0.4;
416
+ }
417
+ }
418
+
419
+ .status-text {
420
+ display: inline-flex;
421
+ align-items: center;
422
+ }
423
+
424
+ /* Action buttons */
425
+ .action-btn {
426
+ display: inline-flex;
427
+ align-items: center;
428
+ justify-content: center;
429
+ width: 32px;
430
+ height: 32px;
431
+ padding: 0;
432
+ background: transparent;
433
+ border: 1px solid transparent;
434
+ border-radius: var(--ic-radius-sm, 0.25rem);
435
+ color: var(--ic-text-dim, #6b7280);
436
+ cursor: pointer;
437
+ transition: background var(--ic-transition, 150ms ease),
438
+ color var(--ic-transition, 150ms ease),
439
+ border-color var(--ic-transition, 150ms ease);
440
+ }
441
+
442
+ .action-btn:hover {
443
+ background: var(--ic-surface-2, #1f2937);
444
+ color: var(--ic-text, #f3f4f6);
445
+ border-color: var(--ic-border, #374151);
446
+ }
447
+
448
+ .action-btn--danger:hover {
449
+ color: var(--ic-error, #f87171);
450
+ border-color: var(--ic-error, #f87171);
451
+ }
452
+
453
+ .action-btn--run:hover {
454
+ color: var(--ic-success, #22c55e);
455
+ border-color: var(--ic-success, #22c55e);
456
+ }
457
+
458
+ .dim-text {
459
+ color: var(--ic-text-dim, #6b7280);
460
+ }
461
+
462
+ /* Mobile responsive cards */
463
+ .mobile-list {
464
+ display: none;
465
+ }
466
+
467
+ @media (max-width: 767px) {
468
+ .grid-table {
469
+ display: none;
470
+ }
471
+ .mobile-list {
472
+ display: flex;
473
+ flex-direction: column;
474
+ gap: 8px;
475
+ }
476
+ .mobile-card {
477
+ background: var(--ic-surface, #111827);
478
+ border: 1px solid var(--ic-border, #374151);
479
+ border-radius: var(--ic-radius-md, 0.5rem);
480
+ padding: 12px;
481
+ cursor: pointer;
482
+ transition: border-color var(--ic-transition, 150ms ease);
483
+ }
484
+ .mobile-card:hover {
485
+ border-color: var(--ic-accent, #3b82f6);
486
+ }
487
+ .card-header {
488
+ display: flex;
489
+ justify-content: space-between;
490
+ align-items: center;
491
+ margin-bottom: 8px;
492
+ }
493
+ .card-label {
494
+ font-weight: 600;
495
+ font-size: var(--ic-text-sm, 0.875rem);
496
+ color: var(--ic-text, #f3f4f6);
497
+ }
498
+ .card-meta {
499
+ display: flex;
500
+ gap: 12px;
501
+ font-size: var(--ic-text-xs, 0.75rem);
502
+ color: var(--ic-text-dim, #6b7280);
503
+ margin-bottom: 8px;
504
+ }
505
+ .card-actions {
506
+ display: flex;
507
+ gap: 4px;
508
+ justify-content: flex-end;
509
+ }
510
+ }
511
+
512
+ .no-results {
513
+ text-align: center;
514
+ padding: var(--ic-space-xl, 2rem);
515
+ color: var(--ic-text-dim, #6b7280);
516
+ font-size: var(--ic-text-sm, 0.875rem);
517
+ }
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};