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.
- package/node_modules/@comis/agent/dist/bootstrap/sections/tool-descriptions.js +130 -10
- package/node_modules/@comis/agent/dist/bootstrap/sections/tooling-sections.d.ts +1 -1
- package/node_modules/@comis/agent/dist/bootstrap/sections/tooling-sections.js +9 -2
- package/node_modules/@comis/agent/dist/bridge/bridge-metrics.d.ts +8 -0
- package/node_modules/@comis/agent/dist/bridge/bridge-metrics.js +2 -0
- package/node_modules/@comis/agent/dist/bridge/pi-event-bridge.d.ts +29 -0
- package/node_modules/@comis/agent/dist/bridge/pi-event-bridge.js +242 -2
- package/node_modules/@comis/agent/dist/bridge/thinking-block-hash-invariant.d.ts +210 -0
- package/node_modules/@comis/agent/dist/bridge/thinking-block-hash-invariant.js +566 -0
- package/node_modules/@comis/agent/dist/context-engine/context-engine.js +8 -6
- package/node_modules/@comis/agent/dist/context-engine/signature-replay-scrubber.d.ts +51 -30
- package/node_modules/@comis/agent/dist/context-engine/signature-replay-scrubber.js +109 -36
- package/node_modules/@comis/agent/dist/executor/executor-context-engine-setup.js +5 -1
- package/node_modules/@comis/agent/dist/executor/executor-post-execution.js +22 -20
- package/node_modules/@comis/agent/dist/executor/executor-prompt-runner.d.ts +2 -0
- package/node_modules/@comis/agent/dist/executor/executor-prompt-runner.js +111 -15
- package/node_modules/@comis/agent/dist/executor/executor-response-filter.d.ts +20 -17
- package/node_modules/@comis/agent/dist/executor/executor-response-filter.js +132 -52
- package/node_modules/@comis/agent/dist/executor/executor-tool-assembly.js +16 -3
- package/node_modules/@comis/agent/dist/executor/model-retry.d.ts +14 -0
- package/node_modules/@comis/agent/dist/executor/model-retry.js +72 -1
- package/node_modules/@comis/agent/dist/executor/pi-executor.d.ts +3 -0
- package/node_modules/@comis/agent/dist/executor/pi-executor.js +68 -9
- package/node_modules/@comis/agent/dist/executor/post-batch-continuation.d.ts +82 -0
- package/node_modules/@comis/agent/dist/executor/post-batch-continuation.js +200 -0
- package/node_modules/@comis/agent/dist/executor/stream-wrappers/request-body-injector.js +1 -9
- package/node_modules/@comis/agent/dist/executor/tool-deferral.d.ts +37 -2
- package/node_modules/@comis/agent/dist/executor/tool-deferral.js +45 -3
- package/node_modules/@comis/agent/dist/executor/tool-parallelism.js +0 -1
- package/node_modules/@comis/agent/dist/executor/types.d.ts +11 -2
- package/node_modules/@comis/agent/dist/index.d.ts +3 -1
- package/node_modules/@comis/agent/dist/index.js +2 -0
- package/node_modules/@comis/agent/dist/model/last-known-model.d.ts +36 -0
- package/node_modules/@comis/agent/dist/model/last-known-model.js +49 -0
- package/node_modules/@comis/agent/dist/model/model-registry-adapter.d.ts +16 -4
- package/node_modules/@comis/agent/dist/model/model-registry-adapter.js +65 -21
- package/node_modules/@comis/agent/dist/planner/types.d.ts +0 -2
- package/node_modules/@comis/agent/dist/session/comis-session-manager.d.ts +10 -0
- package/node_modules/@comis/agent/dist/session/comis-session-manager.js +5 -0
- package/node_modules/@comis/agent/dist/spawn/pi-mono-adapters.js +7 -0
- package/node_modules/@comis/agent/package.json +1 -1
- package/node_modules/@comis/channels/package.json +1 -1
- package/node_modules/@comis/cli/dist/client/rpc-client.js +6 -1
- package/node_modules/@comis/cli/dist/commands/doctor.js +5 -3
- package/node_modules/@comis/cli/dist/commands/health.js +5 -2
- package/node_modules/@comis/cli/dist/wizard/json-output.js +7 -3
- package/node_modules/@comis/cli/dist/wizard/steps/11-daemon-start.js +130 -0
- package/node_modules/@comis/cli/package.json +1 -1
- package/node_modules/@comis/core/dist/bootstrap.js +5 -0
- package/node_modules/@comis/core/dist/config/env-layer.d.ts +31 -0
- package/node_modules/@comis/core/dist/config/env-layer.js +41 -0
- package/node_modules/@comis/core/dist/config/immutable-keys.d.ts +2 -2
- package/node_modules/@comis/core/dist/config/immutable-keys.js +8 -3
- package/node_modules/@comis/core/dist/config/layered.d.ts +9 -0
- package/node_modules/@comis/core/dist/config/layered.js +11 -0
- package/node_modules/@comis/core/dist/config/managed-sections.d.ts +43 -4
- package/node_modules/@comis/core/dist/config/managed-sections.js +100 -6
- package/node_modules/@comis/core/dist/config/schema-agent.d.ts +39 -0
- package/node_modules/@comis/core/dist/config/schema-agent.js +14 -0
- package/node_modules/@comis/core/dist/config/schema.d.ts +4 -0
- package/node_modules/@comis/core/dist/config/schema.js +14 -0
- package/node_modules/@comis/core/dist/domain/execution-graph.d.ts +1 -1
- package/node_modules/@comis/core/dist/event-bus/events-agent.d.ts +17 -2
- package/node_modules/@comis/core/dist/exports/config.d.ts +2 -2
- package/node_modules/@comis/core/dist/exports/config.js +1 -1
- package/node_modules/@comis/core/package.json +1 -1
- package/node_modules/@comis/daemon/dist/daemon.d.ts +22 -0
- package/node_modules/@comis/daemon/dist/daemon.js +45 -0
- package/node_modules/@comis/daemon/dist/rpc/agent-handlers.d.ts +5 -2
- package/node_modules/@comis/daemon/dist/rpc/agent-handlers.js +80 -1
- package/node_modules/@comis/daemon/dist/rpc/agent-inline-workspace.d.ts +67 -0
- package/node_modules/@comis/daemon/dist/rpc/agent-inline-workspace.js +139 -0
- package/node_modules/@comis/daemon/dist/rpc/model-handlers.d.ts +3 -0
- package/node_modules/@comis/daemon/dist/rpc/model-handlers.js +29 -5
- package/node_modules/@comis/daemon/dist/rpc/probe-provider-auth.d.ts +30 -0
- package/node_modules/@comis/daemon/dist/rpc/probe-provider-auth.js +59 -0
- package/node_modules/@comis/daemon/dist/rpc/provider-handlers.d.ts +37 -0
- package/node_modules/@comis/daemon/dist/rpc/provider-handlers.js +330 -0
- package/node_modules/@comis/daemon/dist/rpc/rpc-dispatch.js +18 -1
- package/node_modules/@comis/daemon/dist/setup-docker-restart-warn.d.ts +4 -0
- package/node_modules/@comis/daemon/dist/setup-docker-restart-warn.js +30 -0
- package/node_modules/@comis/daemon/dist/wiring/setup-agents.d.ts +3 -1
- package/node_modules/@comis/daemon/dist/wiring/setup-agents.js +28 -2
- package/node_modules/@comis/daemon/dist/wiring/setup-cross-session.js +1 -0
- package/node_modules/@comis/daemon/dist/wiring/setup-tools.js +7 -4
- package/node_modules/@comis/daemon/package.json +1 -1
- package/node_modules/@comis/gateway/package.json +1 -1
- package/node_modules/@comis/infra/dist/index.d.ts +1 -0
- package/node_modules/@comis/infra/dist/index.js +2 -0
- package/node_modules/@comis/infra/dist/runtime/is-docker.d.ts +1 -0
- package/node_modules/@comis/infra/dist/runtime/is-docker.js +25 -0
- package/node_modules/@comis/infra/package.json +1 -1
- package/node_modules/@comis/memory/package.json +1 -1
- package/node_modules/@comis/scheduler/package.json +1 -1
- package/node_modules/@comis/shared/package.json +1 -1
- package/node_modules/@comis/skills/dist/bridge/tool-metadata-registry.js +1 -3
- package/node_modules/@comis/skills/dist/builtin/platform/admin-manage-factory.js +24 -1
- package/node_modules/@comis/skills/dist/builtin/platform/agents-manage-tool.d.ts +53 -7
- package/node_modules/@comis/skills/dist/builtin/platform/agents-manage-tool.js +218 -24
- package/node_modules/@comis/skills/dist/builtin/platform/gateway-tool.d.ts +4 -1
- package/node_modules/@comis/skills/dist/builtin/platform/gateway-tool.js +16 -1
- package/node_modules/@comis/skills/dist/builtin/platform/index.d.ts +1 -1
- package/node_modules/@comis/skills/dist/builtin/platform/index.js +1 -1
- package/node_modules/@comis/skills/dist/builtin/platform/providers-manage-tool.d.ts +56 -0
- package/node_modules/@comis/skills/dist/builtin/platform/providers-manage-tool.js +203 -0
- package/node_modules/@comis/skills/dist/index.d.ts +1 -1
- package/node_modules/@comis/skills/dist/index.js +2 -2
- package/node_modules/@comis/skills/dist/policy/tool-policy.js +0 -1
- package/node_modules/@comis/skills/package.json +1 -1
- package/node_modules/@comis/web/dist/assets/{agent-detail-BG9MGWWj.js → agent-detail-DqL6Artv.js} +270 -270
- package/node_modules/@comis/web/dist/assets/agent-editor-CNM_h94Y.js +2173 -0
- package/node_modules/@comis/web/dist/assets/{agent-list-LHCJ4rw2.js → agent-list-Dbh-xD_F.js} +170 -170
- package/node_modules/@comis/web/dist/assets/{approvals-q9VH_IKr.js → approvals-C-K6hN2U.js} +13 -13
- package/node_modules/@comis/web/dist/assets/billing-view-C1DmtyzK.js +375 -0
- package/node_modules/@comis/web/dist/assets/{channel-detail-CaInesJM.js → channel-detail-CtCH22N1.js} +265 -265
- package/node_modules/@comis/web/dist/assets/channel-list-C7xXn-60.js +323 -0
- package/node_modules/@comis/web/dist/assets/{chat-console-CNmzl0JW.js → chat-console-C51pjFwk.js} +243 -246
- package/node_modules/@comis/web/dist/assets/{config-editor-DX4ITw6y.js → config-editor-BLArYRB7.js} +477 -477
- package/node_modules/@comis/web/dist/assets/{context-dag-browser-BwiaF5tf.js → context-dag-browser-fuyMinNI.js} +105 -105
- package/node_modules/@comis/web/dist/assets/{context-engine-BZ5Am6hA.js → context-engine-Bngf2bH0.js} +136 -136
- package/node_modules/@comis/web/dist/assets/decorate-BvWYovGE.js +38 -0
- package/node_modules/@comis/web/dist/assets/{delivery-view-OfBZof-m.js → delivery-view-C80hucxX.js} +134 -134
- package/node_modules/@comis/web/dist/assets/{diagnostics-view-YFwCxgr2.js → diagnostics-view-Cl4VbHZ6.js} +82 -82
- package/node_modules/@comis/web/dist/assets/directive-BOYXJ-K-.js +1 -0
- package/node_modules/@comis/web/dist/assets/{extract-variables-BM5qyK-s.js → extract-variables-B7-Doo7l.js} +39 -39
- package/node_modules/@comis/web/dist/assets/{ic-array-editor-B7m6x7-S.js → ic-array-editor-BLoEyeLS.js} +29 -29
- package/node_modules/@comis/web/dist/assets/{ic-breadcrumb-CUMpp3BL.js → ic-breadcrumb-DqN6G3gc.js} +16 -16
- package/node_modules/@comis/web/dist/assets/{ic-budget-segment-bar-BtJ6x5mN.js → ic-budget-segment-bar-zLsMzjDO.js} +20 -20
- package/node_modules/@comis/web/dist/assets/ic-chat-message-ByFUoMm6.js +352 -0
- package/node_modules/@comis/web/dist/assets/{ic-confirm-dialog-CCDbB04e.js → ic-confirm-dialog-DGlPbV1T.js} +26 -26
- package/node_modules/@comis/web/dist/assets/{ic-connection-dot-CnT1b8xr.js → ic-connection-dot-C4nDHgY2.js} +13 -13
- package/node_modules/@comis/web/dist/assets/ic-data-table-CKIvr-ag.js +277 -0
- package/node_modules/@comis/web/dist/assets/ic-delivery-row-B3YwjjuM.js +67 -0
- package/node_modules/@comis/web/dist/assets/{ic-detail-panel-BF83r-if.js → ic-detail-panel-DiCe4hLr.js} +27 -27
- package/node_modules/@comis/web/dist/assets/{ic-empty-state-60l2ePhd.js → ic-empty-state-CM3Wbj2f.js} +19 -19
- package/node_modules/@comis/web/dist/assets/ic-graph-canvas-ByRjij68.js +359 -0
- package/node_modules/@comis/web/dist/assets/ic-icon-BGNCCPpZ.js +33 -0
- package/node_modules/@comis/web/dist/assets/{ic-layer-waterfall-COvEYMg5.js → ic-layer-waterfall-WkaFyu-l.js} +18 -18
- package/node_modules/@comis/web/dist/assets/ic-relative-time-B3UAnTqg.js +12 -0
- package/node_modules/@comis/web/dist/assets/{ic-search-input-CSOxY9g7.js → ic-search-input-B02AGw1i.js} +22 -22
- package/node_modules/@comis/web/dist/assets/{ic-select-Ce-Raudx.js → ic-select-BqfZISjw.js} +29 -29
- package/node_modules/@comis/web/dist/assets/ic-tabs-yBjkWKJH.js +95 -0
- package/node_modules/@comis/web/dist/assets/ic-tag-CvMVQFRR.js +33 -0
- package/node_modules/@comis/web/dist/assets/{ic-time-range-picker-CypCT68y.js → ic-time-range-picker-DXbYeBmY.js} +31 -31
- package/node_modules/@comis/web/dist/assets/{ic-tool-call-7MaXSsCW.js → ic-tool-call-Bh5kq-yY.js} +51 -51
- package/node_modules/@comis/web/dist/assets/index-BBkuC-EU.js +2792 -0
- package/node_modules/@comis/web/dist/assets/index-CVEaS9aY.css +2 -0
- package/node_modules/@comis/web/dist/assets/{mcp-management-BNZPnpDn.js → mcp-management-DB-phOo7.js} +209 -209
- package/node_modules/@comis/web/dist/assets/{media-config-BBvTYxOX.js → media-config-CRqZ1ZUH.js} +154 -154
- package/node_modules/@comis/web/dist/assets/{media-test-BkK3RCRK.js → media-test-C9vE20Oy.js} +259 -259
- package/node_modules/@comis/web/dist/assets/{memory-inspector-1hDGCGat.js → memory-inspector-CeqfnxMZ.js} +450 -450
- package/node_modules/@comis/web/dist/assets/{message-center-CXefwsUu.js → message-center-Daup7Mof.js} +290 -290
- package/node_modules/@comis/web/dist/assets/{models-C1qcU_j3.js → models-DLYnEU8E.js} +371 -371
- package/node_modules/@comis/web/dist/assets/observability-types-D0tkwElU.js +1 -0
- package/node_modules/@comis/web/dist/assets/{observe-view-C0VBhX4C.js → observe-view-BTSt_PO5.js} +399 -399
- package/node_modules/@comis/web/dist/assets/pipeline-builder-DknfzyLt.js +1495 -0
- package/node_modules/@comis/web/dist/assets/{pipeline-history-DkfOQ6SW.js → pipeline-history-JnHZdeU_.js} +124 -124
- package/node_modules/@comis/web/dist/assets/{pipeline-history-detail-hyHgD0ai.js → pipeline-history-detail-Dg4knsEb.js} +65 -65
- package/node_modules/@comis/web/dist/assets/{pipeline-list-BPW8hV-q.js → pipeline-list-AEnibjsp.js} +227 -227
- package/node_modules/@comis/web/dist/assets/{pipeline-monitor-Bip16T7e.js → pipeline-monitor-DG7RbIOO.js} +298 -298
- package/node_modules/@comis/web/dist/assets/{scheduler-BGgwKd06.js → scheduler-uL1fYKAT.js} +486 -486
- package/node_modules/@comis/web/dist/assets/{security-D15st4xx.js → security-C3DywRLH.js} +389 -389
- package/node_modules/@comis/web/dist/assets/{session-detail-SGEYNJ0M.js → session-detail-BtqCNWXV.js} +294 -294
- package/node_modules/@comis/web/dist/assets/session-key-parser-Dkqcj2Ss.js +1 -0
- package/node_modules/@comis/web/dist/assets/session-list-CJXWa2XT.js +231 -0
- package/node_modules/@comis/web/dist/assets/{setup-wizard-nT0tz9QP.js → setup-wizard-ywn7oJvu.js} +486 -494
- package/node_modules/@comis/web/dist/assets/{skills-D8yVfSUy.js → skills-DX0KYnWD.js} +329 -329
- package/node_modules/@comis/web/dist/assets/{subagents-HHXMeHYo.js → subagents-B8p5YJEB.js} +74 -74
- package/node_modules/@comis/web/dist/assets/{workspace-manager-BQlr10iH.js → workspace-manager-CgzNIrw1.js} +236 -236
- package/node_modules/@comis/web/dist/index.html +3 -2
- package/node_modules/@comis/web/package.json +1 -1
- package/package.json +15 -15
- package/node_modules/@comis/skills/dist/builtin/platform/agents-list-tool.d.ts +0 -19
- package/node_modules/@comis/skills/dist/builtin/platform/agents-list-tool.js +0 -39
- package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +0 -2173
- package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +0 -375
- package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +0 -323
- package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +0 -1
- package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +0 -352
- package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +0 -277
- package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +0 -67
- package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +0 -359
- package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +0 -33
- package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +0 -12
- package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +0 -95
- package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +0 -33
- package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +0 -2830
- package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +0 -1
- package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +0 -1
- package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +0 -1496
- package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +0 -1
- package/node_modules/@comis/web/dist/assets/session-list-6ybUTxbY.js +0 -231
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
import{
|
|
2
|
-
<div class="bar">
|
|
3
|
-
<span class=${t} role="status">${this.graphStatus}</span>
|
|
4
|
-
<span class="elapsed">${this._formatElapsed(this.elapsedMs)}</span>
|
|
5
|
-
<span class="progress">${this.stats.completed}/${this.stats.total} nodes complete</span>
|
|
6
|
-
<span class="tokens">N/A</span>
|
|
7
|
-
${this.isTerminal?l`
|
|
8
|
-
<button
|
|
9
|
-
class="outputs-btn"
|
|
10
|
-
aria-label="View graph outputs"
|
|
11
|
-
@click=${this._onViewOutputs}
|
|
12
|
-
>View Outputs</button>
|
|
13
|
-
`:l`
|
|
14
|
-
<button
|
|
15
|
-
class="cancel-btn"
|
|
16
|
-
aria-label="Cancel pipeline execution"
|
|
17
|
-
@click=${this._onCancel}
|
|
18
|
-
>Cancel</button>
|
|
19
|
-
`}
|
|
20
|
-
</div>
|
|
21
|
-
`}_formatElapsed(t){const e=Math.floor(t/1e3),s=Math.floor(e/60),r=e%60;return s>0?`${s}m ${String(r).padStart(2,"0")}s`:`${r}s`}_onCancel(){this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))}_onViewOutputs(){this.dispatchEvent(new CustomEvent("view-outputs",{bubbles:!0,composed:!0}))}};W.styles=[F,B`
|
|
1
|
+
import{c as e,f as t,h as n,l as r,m as i,n as a,o,r as s,s as c,t as l,u}from"./decorate-BvWYovGE.js";import{a as d}from"./index-BBkuC-EU.js";import"./ic-breadcrumb-DqN6G3gc.js";import"./ic-confirm-dialog-DGlPbV1T.js";import{n as f,t as p}from"./ic-graph-canvas-ByRjij68.js";var m=2e3,h=1e3;function g(){let e=``,t=`running`,n=!1,r=[],i=[],a=[],o={total:0,completed:0,failed:0,skipped:0,running:0,pending:0},s=0,c=null,l=!0,u=null,d=null,f=null,p=null,g=[],_=null,v=new Set;function y(){for(let e of v)e()}function b(e,t){return e.map(e=>{let n=t[e.id];return{id:e.id,task:e.task,agentId:e.agentId,modelId:e.modelId,status:n?.status??`pending`,runId:n?.runId,output:n?.output,error:n?.error,startedAt:n?.startedAt,completedAt:n?.completedAt,durationMs:n?.durationMs,retryAttempt:n?.retryAttempt,retriesRemaining:n?.retriesRemaining,dependsOn:e.dependsOn,position:{x:e.position.x,y:e.position.y}}})}function x(i){e=i.graphId,t=i.status,n=i.isTerminal,a=i.executionOrder,o=i.stats,r=b(g,i.nodes),l=!1,u=null,p===null&&i.status===`running`&&(p=Date.now(),s=0,E()),n&&(w(),T()),y()}function S(e){u=e instanceof Error?e.message:String(e),l=!1,y()}async function C(e,t){try{x(await e.call(`graph.status`,{graphId:t}))}catch(e){S(e)}}function w(){d!==null&&(clearInterval(d),d=null)}function T(){f!==null&&(clearInterval(f),f=null)}function E(){T(),f=setInterval(()=>{p!==null&&(s=Date.now()-p,y())},h)}function D(){let e=0,t=0,n=0,i=0,a=0;for(let o of r)switch(o.status){case`completed`:e++;break;case`failed`:t++;break;case`skipped`:n++;break;case`running`:i++;break;default:a++;break}o={total:r.length,completed:e,failed:t,skipped:n,running:i,pending:a}}return{subscribe(e){return v.add(e),()=>{v.delete(e)}},getSnapshot(){return Object.freeze({graphId:e,graphStatus:t,isTerminal:n,nodes:[...r],edges:[...i],executionOrder:[...a],stats:{...o},elapsedMs:s,selectedNodeId:c,loading:l,error:u})},selectNode(e){c=e,y()},startPolling(t,r,a,o){w(),T(),_=t,e=r,g=a,i=o,p=null,n=!1,C(t,r),d=setInterval(()=>{C(t,r)},m)},stopPolling(){w(),T()},destroy(){w(),T(),v.clear()},applyEvent(i,a){if(i===`graph:node_updated`){let t=a;if(t.graphId!==e)return;let n=r.findIndex(e=>e.id===t.nodeId);if(n>=0){let e=r[n];r[n]={...e,status:t.status,durationMs:t.durationMs??e.durationMs,error:t.error??e.error,startedAt:t.status===`running`&&e.startedAt==null?t.timestamp:e.startedAt,completedAt:t.status===`completed`||t.status===`failed`?t.timestamp:e.completedAt},D(),y()}}else if(i===`graph:completed`){let r=a;if(r.graphId!==e)return;t=r.status,n=!0,o={total:r.nodeCount,completed:r.nodesCompleted,failed:r.nodesFailed,skipped:r.nodesSkipped,running:0,pending:0},w(),T(),l=!1,u=null,y()}else if(i===`graph:started`){if(a.graphId!==e)return;p===null&&(p=Date.now(),s=0,E()),y()}},suspendPolling(){w()},resumePolling(){n||_&&(C(_,e),w(),d=setInterval(()=>{C(_,e)},m))}}}var _=class extends r{constructor(...e){super(...e),this.graphStatus=`running`,this.isTerminal=!1,this.elapsedMs=0,this.stats={total:0,completed:0,failed:0,skipped:0,running:0,pending:0}}static{this.styles=[s,n`
|
|
22
2
|
:host {
|
|
23
3
|
display: block;
|
|
24
4
|
}
|
|
@@ -109,106 +89,27 @@ import{s as F,i as B,n as g,a as G,b as l,t as q,f as ht,r as P,A as h,w as H,I
|
|
|
109
89
|
outline: 2px solid var(--ic-accent);
|
|
110
90
|
outline-offset: 2px;
|
|
111
91
|
}
|
|
112
|
-
`]
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
${s?l`<span class="retry-badge">(retrying)</span>`:h}
|
|
132
|
-
</div>
|
|
133
|
-
${s?l`<div class="field-row">
|
|
134
|
-
<span class="field-label">Retry</span>
|
|
135
|
-
<span class="field-value">Attempt ${t.retryAttempt}${t.retriesRemaining!=null?` (${t.retriesRemaining} remaining)`:""}</span>
|
|
136
|
-
</div>`:h}
|
|
137
|
-
${t.agentId?l`<div class="field-row">
|
|
138
|
-
<span class="field-label">Agent</span>
|
|
139
|
-
<span class="field-value">${t.agentId}</span>
|
|
140
|
-
</div>`:h}
|
|
141
|
-
${t.modelId?l`<div class="field-row">
|
|
142
|
-
<span class="field-label">Model</span>
|
|
143
|
-
<span class="field-value">${t.modelId}</span>
|
|
144
|
-
</div>`:h}
|
|
145
|
-
${t.runId?l`<div class="field-row">
|
|
146
|
-
<span class="field-label">Run ID</span>
|
|
147
|
-
<span class="field-value mono" title=${t.runId}>${t.runId}</span>
|
|
148
|
-
</div>`:h}
|
|
149
|
-
`}_renderTiming(t){return l`
|
|
150
|
-
<div class="section-header">Timing</div>
|
|
151
|
-
<div class="field-row">
|
|
152
|
-
<span class="field-label">Started</span>
|
|
153
|
-
<span class="field-value">${lt(t.startedAt)}</span>
|
|
154
|
-
</div>
|
|
155
|
-
<div class="field-row">
|
|
156
|
-
<span class="field-label">Completed</span>
|
|
157
|
-
<span class="field-value">${lt(t.completedAt)}</span>
|
|
158
|
-
</div>
|
|
159
|
-
<div class="field-row">
|
|
160
|
-
<span class="field-label">Duration</span>
|
|
161
|
-
<span class="field-value">${wt(t.durationMs)}</span>
|
|
162
|
-
</div>
|
|
163
|
-
`}_renderTask(t){return l`
|
|
164
|
-
<div class="section-header">Task</div>
|
|
165
|
-
<div class="task-box">${t.task}</div>
|
|
166
|
-
`}_renderDependencies(t){return t.dependsOn.length?l`
|
|
167
|
-
<div class="section-header">Dependencies</div>
|
|
168
|
-
${t.dependsOn.map(e=>{const r=this.allNodes.find(o=>o.id===e)?.status??"pending",i=ct[r]??"#6b7280";return l`
|
|
169
|
-
<div class="dep-row">
|
|
170
|
-
<span class="dep-dot" style="background: ${i}"></span>
|
|
171
|
-
<span class="dep-label">${e}</span>
|
|
172
|
-
</div>
|
|
173
|
-
`})}
|
|
174
|
-
`:h}_renderOutput(t){if(!t.output)return h;const s=t.output.length>300?t.output.slice(0,300)+"...":t.output,r=t.output.endsWith("... [truncated]");return l`
|
|
175
|
-
<div class="section-header">Output</div>
|
|
176
|
-
<pre class="output-block">${s}</pre>
|
|
177
|
-
${r?l`<div class="truncated-note">Output may be truncated by server</div>`:h}
|
|
178
|
-
<button class="view-full-btn" @click=${this._openFullOutput}>View Full Output</button>
|
|
179
|
-
`}_renderError(t){return t.error?l`
|
|
180
|
-
<div class="section-header">Error</div>
|
|
181
|
-
<pre class="error-block">${t.error}</pre>
|
|
182
|
-
`:h}_renderSteer(t){return t.status!=="running"||!t.runId?h:l`
|
|
183
|
-
<div class="section-header">Steer</div>
|
|
184
|
-
${this._steerMode?l`
|
|
185
|
-
<div class="steer-area">
|
|
186
|
-
<textarea
|
|
187
|
-
placeholder="Enter new instructions..."
|
|
188
|
-
.value=${this._steerText}
|
|
189
|
-
@input=${e=>{this._steerText=e.target.value}}
|
|
190
|
-
></textarea>
|
|
191
|
-
<div class="send-row">
|
|
192
|
-
<button class="send-btn" @click=${this._dispatchSteer}>Send</button>
|
|
193
|
-
</div>
|
|
194
|
-
</div>
|
|
195
|
-
`:l`<button class="steer-btn" @click=${()=>{this._steerMode=!0}}>Steer</button>`}
|
|
196
|
-
`}_renderModal(t){const e=t.output??t.error??"",s=t.output?"Full Output":"Error Details";return l`
|
|
197
|
-
<div class="modal-backdrop" @click=${this._closeFullOutput}>
|
|
198
|
-
<div class="modal-content" @click=${r=>r.stopPropagation()}>
|
|
199
|
-
<div class="modal-header">
|
|
200
|
-
<h4>${s} - ${t.id}</h4>
|
|
201
|
-
<div class="modal-actions">
|
|
202
|
-
<button class="copy-btn" @click=${this._copyFullOutput}>Copy</button>
|
|
203
|
-
<button class="modal-close-btn" @click=${this._closeFullOutput}>Close</button>
|
|
204
|
-
</div>
|
|
205
|
-
</div>
|
|
206
|
-
<div class="modal-body">
|
|
207
|
-
<pre>${e}</pre>
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
92
|
+
`]}render(){return t`
|
|
93
|
+
<div class="bar">
|
|
94
|
+
<span class=${`status-badge status-badge--${this.graphStatus}`} role="status">${this.graphStatus}</span>
|
|
95
|
+
<span class="elapsed">${this._formatElapsed(this.elapsedMs)}</span>
|
|
96
|
+
<span class="progress">${this.stats.completed}/${this.stats.total} nodes complete</span>
|
|
97
|
+
<span class="tokens">N/A</span>
|
|
98
|
+
${this.isTerminal?t`
|
|
99
|
+
<button
|
|
100
|
+
class="outputs-btn"
|
|
101
|
+
aria-label="View graph outputs"
|
|
102
|
+
@click=${this._onViewOutputs}
|
|
103
|
+
>View Outputs</button>
|
|
104
|
+
`:t`
|
|
105
|
+
<button
|
|
106
|
+
class="cancel-btn"
|
|
107
|
+
aria-label="Cancel pipeline execution"
|
|
108
|
+
@click=${this._onCancel}
|
|
109
|
+
>Cancel</button>
|
|
110
|
+
`}
|
|
210
111
|
</div>
|
|
211
|
-
`}};
|
|
112
|
+
`}_formatElapsed(e){let t=Math.floor(e/1e3),n=Math.floor(t/60),r=t%60;return n>0?`${n}m ${String(r).padStart(2,`0`)}s`:`${r}s`}_onCancel(){this.dispatchEvent(new CustomEvent(`cancel`,{bubbles:!0,composed:!0}))}_onViewOutputs(){this.dispatchEvent(new CustomEvent(`view-outputs`,{bubbles:!0,composed:!0}))}};l([c()],_.prototype,`graphStatus`,void 0),l([c({type:Boolean})],_.prototype,`isTerminal`,void 0),l([c({type:Number})],_.prototype,`elapsedMs`,void 0),l([c({attribute:!1})],_.prototype,`stats`,void 0),_=l([e(`ic-monitor-status-bar`)],_);var v={pending:`#6b7280`,ready:`#a78bfa`,running:`#06b6d4`,completed:`#22c55e`,failed:`#ef4444`,skipped:`#9ca3af`};function y(e){return e==null?`--`:new Date(e).toLocaleTimeString()}function b(e){if(e==null)return`--`;let t=e/1e3;return t>=60?`${Math.floor(t/60)}m ${Math.floor(t%60).toString().padStart(2,`0`)}s`:`${t.toFixed(1)}s`}var x=class extends r{constructor(...e){super(...e),this.node=null,this.allNodes=[],this._showFullOutput=!1,this._steerMode=!1,this._steerText=``}static{this.styles=[s,a,n`
|
|
212
113
|
:host {
|
|
213
114
|
display: block;
|
|
214
115
|
width: 320px;
|
|
@@ -505,54 +406,106 @@ import{s as F,i as B,n as g,a as G,b as l,t as q,f as ht,r as P,A as h,w as H,I
|
|
|
505
406
|
font-style: italic;
|
|
506
407
|
padding: 8px 0;
|
|
507
408
|
}
|
|
508
|
-
`]
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
</
|
|
555
|
-
|
|
409
|
+
`]}_dispatchClose(){this.dispatchEvent(new CustomEvent(`close`,{bubbles:!0,composed:!0}))}_dispatchSteer(){let e=this.node;!e?.runId||!this._steerText.trim()||(this.dispatchEvent(new CustomEvent(`steer`,{bubbles:!0,composed:!0,detail:{runId:e.runId,message:this._steerText.trim()}})),this._steerMode=!1,this._steerText=``)}_openFullOutput(){this._showFullOutput=!0}_closeFullOutput(){this._showFullOutput=!1}async _copyFullOutput(){let e=this.node?.output??this.node?.error??``;try{await navigator.clipboard.writeText(e)}catch{}}render(){let e=this.node;return e?t`
|
|
410
|
+
${this._renderHeader(e)}
|
|
411
|
+
${this._renderStatus(e)}
|
|
412
|
+
${this._renderTiming(e)}
|
|
413
|
+
${this._renderTask(e)}
|
|
414
|
+
${this._renderDependencies(e)}
|
|
415
|
+
${this._renderOutput(e)}
|
|
416
|
+
${this._renderError(e)}
|
|
417
|
+
${this._renderSteer(e)}
|
|
418
|
+
${this._showFullOutput?this._renderModal(e):u}
|
|
419
|
+
`:u}_renderHeader(e){return t`
|
|
420
|
+
<div class="header">
|
|
421
|
+
<h3 title=${e.id}>${e.id}</h3>
|
|
422
|
+
<button class="close-btn" @click=${this._dispatchClose} title="Close">×</button>
|
|
423
|
+
</div>
|
|
424
|
+
`}_renderStatus(e){let n=v[e.status]??`#6b7280`,r=e.retryAttempt!=null&&e.retryAttempt>0;return t`
|
|
425
|
+
<div class="section-header">Status</div>
|
|
426
|
+
<div style="margin-bottom: 6px">
|
|
427
|
+
<span class="status-badge" style="background: ${n}">${e.status}</span>
|
|
428
|
+
${r?t`<span class="retry-badge">(retrying)</span>`:u}
|
|
429
|
+
</div>
|
|
430
|
+
${r?t`<div class="field-row">
|
|
431
|
+
<span class="field-label">Retry</span>
|
|
432
|
+
<span class="field-value">Attempt ${e.retryAttempt}${e.retriesRemaining==null?``:` (${e.retriesRemaining} remaining)`}</span>
|
|
433
|
+
</div>`:u}
|
|
434
|
+
${e.agentId?t`<div class="field-row">
|
|
435
|
+
<span class="field-label">Agent</span>
|
|
436
|
+
<span class="field-value">${e.agentId}</span>
|
|
437
|
+
</div>`:u}
|
|
438
|
+
${e.modelId?t`<div class="field-row">
|
|
439
|
+
<span class="field-label">Model</span>
|
|
440
|
+
<span class="field-value">${e.modelId}</span>
|
|
441
|
+
</div>`:u}
|
|
442
|
+
${e.runId?t`<div class="field-row">
|
|
443
|
+
<span class="field-label">Run ID</span>
|
|
444
|
+
<span class="field-value mono" title=${e.runId}>${e.runId}</span>
|
|
445
|
+
</div>`:u}
|
|
446
|
+
`}_renderTiming(e){return t`
|
|
447
|
+
<div class="section-header">Timing</div>
|
|
448
|
+
<div class="field-row">
|
|
449
|
+
<span class="field-label">Started</span>
|
|
450
|
+
<span class="field-value">${y(e.startedAt)}</span>
|
|
451
|
+
</div>
|
|
452
|
+
<div class="field-row">
|
|
453
|
+
<span class="field-label">Completed</span>
|
|
454
|
+
<span class="field-value">${y(e.completedAt)}</span>
|
|
455
|
+
</div>
|
|
456
|
+
<div class="field-row">
|
|
457
|
+
<span class="field-label">Duration</span>
|
|
458
|
+
<span class="field-value">${b(e.durationMs)}</span>
|
|
459
|
+
</div>
|
|
460
|
+
`}_renderTask(e){return t`
|
|
461
|
+
<div class="section-header">Task</div>
|
|
462
|
+
<div class="task-box">${e.task}</div>
|
|
463
|
+
`}_renderDependencies(e){return e.dependsOn.length?t`
|
|
464
|
+
<div class="section-header">Dependencies</div>
|
|
465
|
+
${e.dependsOn.map(e=>t`
|
|
466
|
+
<div class="dep-row">
|
|
467
|
+
<span class="dep-dot" style="background: ${v[this.allNodes.find(t=>t.id===e)?.status??`pending`]??`#6b7280`}"></span>
|
|
468
|
+
<span class="dep-label">${e}</span>
|
|
469
|
+
</div>
|
|
470
|
+
`)}
|
|
471
|
+
`:u}_renderOutput(e){return e.output?t`
|
|
472
|
+
<div class="section-header">Output</div>
|
|
473
|
+
<pre class="output-block">${e.output.length>300?e.output.slice(0,300)+`...`:e.output}</pre>
|
|
474
|
+
${e.output.endsWith(`... [truncated]`)?t`<div class="truncated-note">Output may be truncated by server</div>`:u}
|
|
475
|
+
<button class="view-full-btn" @click=${this._openFullOutput}>View Full Output</button>
|
|
476
|
+
`:u}_renderError(e){return e.error?t`
|
|
477
|
+
<div class="section-header">Error</div>
|
|
478
|
+
<pre class="error-block">${e.error}</pre>
|
|
479
|
+
`:u}_renderSteer(e){return e.status!==`running`||!e.runId?u:t`
|
|
480
|
+
<div class="section-header">Steer</div>
|
|
481
|
+
${this._steerMode?t`
|
|
482
|
+
<div class="steer-area">
|
|
483
|
+
<textarea
|
|
484
|
+
placeholder="Enter new instructions..."
|
|
485
|
+
.value=${this._steerText}
|
|
486
|
+
@input=${e=>{this._steerText=e.target.value}}
|
|
487
|
+
></textarea>
|
|
488
|
+
<div class="send-row">
|
|
489
|
+
<button class="send-btn" @click=${this._dispatchSteer}>Send</button>
|
|
490
|
+
</div>
|
|
491
|
+
</div>
|
|
492
|
+
`:t`<button class="steer-btn" @click=${()=>{this._steerMode=!0}}>Steer</button>`}
|
|
493
|
+
`}_renderModal(e){let n=e.output??e.error??``,r=e.output?`Full Output`:`Error Details`;return t`
|
|
494
|
+
<div class="modal-backdrop" @click=${this._closeFullOutput}>
|
|
495
|
+
<div class="modal-content" @click=${e=>e.stopPropagation()}>
|
|
496
|
+
<div class="modal-header">
|
|
497
|
+
<h4>${r} - ${e.id}</h4>
|
|
498
|
+
<div class="modal-actions">
|
|
499
|
+
<button class="copy-btn" @click=${this._copyFullOutput}>Copy</button>
|
|
500
|
+
<button class="modal-close-btn" @click=${this._closeFullOutput}>Close</button>
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
<div class="modal-body">
|
|
504
|
+
<pre>${n}</pre>
|
|
505
|
+
</div>
|
|
506
|
+
</div>
|
|
507
|
+
</div>
|
|
508
|
+
`}};l([c({attribute:!1})],x.prototype,`node`,void 0),l([c({attribute:!1})],x.prototype,`allNodes`,void 0),l([o()],x.prototype,`_showFullOutput`,void 0),l([o()],x.prototype,`_steerMode`,void 0),l([o()],x.prototype,`_steerText`,void 0),x=l([e(`ic-node-detail-panel`)],x);var S=28,C=4,w=80,T=20,E=2,D=200,O={running:`#06b6d4`,completed:`#22c55e`,failed:`#ef4444`,skipped:`#9ca3af`,pending:`#4b5563`,ready:`#a78bfa`},k=class extends r{constructor(...e){super(...e),this.nodes=[],this.executionOrder=[],this.elapsedMs=0,this.selectedNodeId=null}static{this.styles=[s,n`
|
|
556
509
|
:host {
|
|
557
510
|
display: block;
|
|
558
511
|
height: 200px;
|
|
@@ -604,31 +557,58 @@ import{s as F,i as B,n as g,a as G,b as l,t as q,f as ht,r as P,A as h,w as H,I
|
|
|
604
557
|
stroke-width: 2;
|
|
605
558
|
fill: none;
|
|
606
559
|
}
|
|
607
|
-
`]
|
|
608
|
-
<svg
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
>
|
|
615
|
-
<!-- Node dots -->
|
|
616
|
-
${a}
|
|
560
|
+
`]}render(){if(!this.executionOrder.length)return t`<svg width="100%" height="100%"></svg>`;let e=new Map(this.nodes.map(e=>[e.id,e])),n=this.executionOrder.map(t=>e.get(t)).filter(e=>e!=null);if(!n.length)return t`<svg width="100%" height="100%"></svg>`;let r=n.filter(e=>e.startedAt!=null).map(e=>e.startedAt),a=r.length>0?Math.min(...r):0,o=Math.max(this.elapsedMs,1e3),s=T+n.length*(S+C)+C,c=Math.max(D,600),l=w+c+16,d=c/o,f=o/1e3,p;p=f<5?1:f<60?5:10;let m=[];for(let e=p;e*1e3<=o;e+=p)m.push(e);return t`
|
|
561
|
+
<svg width="${l}" height="${s}" viewBox="0 0 ${l} ${s}">
|
|
562
|
+
<!-- Time markers -->
|
|
563
|
+
${m.map(e=>{let t=w+e*1e3*d;return i`
|
|
564
|
+
<line class="time-line" x1="${t}" y1="${T}" x2="${t}" y2="${s}" />
|
|
565
|
+
<text class="time-marker" x="${t}" y="2">${e}s</text>
|
|
566
|
+
`})}
|
|
617
567
|
|
|
618
|
-
<!--
|
|
619
|
-
${
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
568
|
+
<!-- Rows -->
|
|
569
|
+
${n.map((e,t)=>{let n=T+t*(S+C)+C,r=e.id===this.selectedNodeId,s=e.retryAttempt!=null&&e.retryAttempt>0,c=e.id.length>10?e.id.slice(0,9)+`…`:e.id,f=s?`${c} (R${e.retryAttempt})`:c,p=0,m=0,h=O[e.status]??`#4b5563`,g=1,_=!1;if(e.status===`running`&&e.startedAt!=null)p=(e.startedAt-a)*d,m=Math.max((o-(e.startedAt-a))*d,4),g=.8,_=!0;else if((e.status===`completed`||e.status===`failed`)&&e.startedAt!=null){p=(e.startedAt-a)*d;let t=e.completedAt??a+o;m=Math.max((t-e.startedAt)*d,4),_=!0}else e.status===`skipped`&&(p=0,m=8,h=O.skipped,g=.5,_=!0);return i`
|
|
570
|
+
<!-- Alternating row background -->
|
|
571
|
+
${t%2==1?i`<rect class="row-bg" x="0" y="${n}" width="${l}" height="${S}" />`:u}
|
|
572
|
+
|
|
573
|
+
<!-- Node label -->
|
|
574
|
+
<text class="label-text" x="4" y="${n+S/2}">
|
|
575
|
+
${f}
|
|
576
|
+
</text>
|
|
577
|
+
|
|
578
|
+
<!-- Bar -->
|
|
579
|
+
${_?i`
|
|
580
|
+
<rect
|
|
581
|
+
class="bar"
|
|
582
|
+
x="${w+p}"
|
|
583
|
+
y="${n+4}"
|
|
584
|
+
width="${m}"
|
|
585
|
+
height="${S-8}"
|
|
586
|
+
rx="${E}"
|
|
587
|
+
ry="${E}"
|
|
588
|
+
fill="${h}"
|
|
589
|
+
opacity="${g}"
|
|
590
|
+
stroke="${s?`#f97316`:`none`}"
|
|
591
|
+
stroke-width="${s?`1.5`:`0`}"
|
|
592
|
+
data-node-id="${e.id}"
|
|
593
|
+
@click=${()=>this._onBarClick(e.id)}
|
|
594
|
+
/>
|
|
595
|
+
${r?i`<rect
|
|
596
|
+
class="selected-highlight"
|
|
597
|
+
x="${w+p-1}"
|
|
598
|
+
y="${n+3}"
|
|
599
|
+
width="${m+2}"
|
|
600
|
+
height="${S-6}"
|
|
601
|
+
rx="${E+1}"
|
|
602
|
+
ry="${E+1}"
|
|
603
|
+
/>`:u}
|
|
604
|
+
`:u}
|
|
605
|
+
`})}
|
|
626
606
|
</svg>
|
|
627
|
-
`}};
|
|
607
|
+
`}_onBarClick(e){this.dispatchEvent(new CustomEvent(`node-inspect`,{bubbles:!0,composed:!0,detail:{nodeId:e}}))}};l([c({attribute:!1})],k.prototype,`nodes`,void 0),l([c({attribute:!1})],k.prototype,`executionOrder`,void 0),l([c({type:Number})],k.prototype,`elapsedMs`,void 0),l([c()],k.prototype,`selectedNodeId`,void 0),k=l([e(`ic-execution-timeline`)],k);var A=160,j=120,M=8,N=4,P=3,F={pending:`#6b7280`,ready:`#a78bfa`,running:`#06b6d4`,completed:`#22c55e`,failed:`#ef4444`,skipped:`#9ca3af`},I=class extends r{constructor(...e){super(...e),this.nodes=[],this.viewport={x:0,y:0,scale:1},this.containerWidth=800,this.containerHeight=600,this._dragging=!1,this._dragStartMinimapX=0,this._dragStartMinimapY=0,this._dragStartVpX=0,this._dragStartVpY=0,this._onPointerDown=e=>{e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),this._dragging=!0;let t=e.currentTarget.getBoundingClientRect();this._dragStartMinimapX=(e.clientX-t.left)/t.width*A,this._dragStartMinimapY=(e.clientY-t.top)/t.height*j,this._dragStartVpX=this.viewport.x,this._dragStartVpY=this.viewport.y},this._onPointerMove=e=>{if(!this._dragging)return;e.preventDefault();let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width*A,r=(e.clientY-t.top)/t.height*j,i=n-this._dragStartMinimapX,a=r-this._dragStartMinimapY,o=this._computeBounds(),s=this._computeScale(o.graphW,o.graphH),c=i/s,l=a/s,u=this._dragStartVpX-c*this.viewport.scale,d=this._dragStartVpY-l*this.viewport.scale;this.dispatchEvent(new CustomEvent(`viewport-change`,{bubbles:!0,composed:!0,detail:{x:u,y:d,scale:this.viewport.scale}}))},this._onPointerUp=e=>{this._dragging&&(this._dragging=!1,e.currentTarget.releasePointerCapture(e.pointerId))}}static{this.styles=[s,n`
|
|
628
608
|
:host {
|
|
629
609
|
display: block;
|
|
630
|
-
width: ${
|
|
631
|
-
height: ${
|
|
610
|
+
width: ${A}px;
|
|
611
|
+
height: ${j}px;
|
|
632
612
|
background: var(--ic-surface, #181825);
|
|
633
613
|
border: 1px solid var(--ic-border);
|
|
634
614
|
border-radius: var(--ic-radius-md, 8px);
|
|
@@ -661,115 +641,27 @@ import{s as F,i as B,n as g,a as G,b as l,t as q,f as ht,r as P,A as h,w as H,I
|
|
|
661
641
|
fill: var(--ic-accent, #3b82f6);
|
|
662
642
|
fill-opacity: 0.05;
|
|
663
643
|
}
|
|
664
|
-
`]
|
|
665
|
-
<
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
<span>${t.error}</span>
|
|
675
|
-
<button @click=${()=>this._initMonitor()}>Retry</button>
|
|
676
|
-
</div>
|
|
677
|
-
`:h}
|
|
678
|
-
|
|
679
|
-
${!t||t.loading?l`<div class="loading-container">Loading execution data...</div>`:l`
|
|
680
|
-
<ic-monitor-status-bar
|
|
681
|
-
.graphStatus=${t.graphStatus}
|
|
682
|
-
?isTerminal=${t.isTerminal}
|
|
683
|
-
.elapsedMs=${t.elapsedMs}
|
|
684
|
-
.stats=${t.stats}
|
|
685
|
-
@cancel=${this._onCancelRequest}
|
|
686
|
-
@view-outputs=${this._onViewOutputs}
|
|
687
|
-
></ic-monitor-status-bar>
|
|
688
|
-
|
|
689
|
-
<div class="monitor-body">
|
|
690
|
-
<div class="canvas-area">
|
|
691
|
-
<ic-graph-canvas
|
|
692
|
-
read-only
|
|
693
|
-
.viewport=${this._viewport}
|
|
694
|
-
.nodes=${this._canvasNodes}
|
|
695
|
-
.edges=${t.edges}
|
|
696
|
-
.selectedNodeIds=${new Set}
|
|
697
|
-
.selectedEdgeId=${null}
|
|
698
|
-
.nodeStatuses=${this._nodeStatuses}
|
|
699
|
-
.edgeStatuses=${this._edgeStatuses}
|
|
700
|
-
.highlightNodeIds=${[]}
|
|
701
|
-
@viewport-change=${this._onViewportChange}
|
|
702
|
-
@node-inspect=${this._onNodeInspect}
|
|
703
|
-
@canvas-click=${this._onCanvasClick}
|
|
704
|
-
></ic-graph-canvas>
|
|
705
|
-
|
|
706
|
-
<div class="minimap-container">
|
|
707
|
-
<ic-graph-minimap
|
|
708
|
-
.nodes=${this._canvasNodes.map(e=>({id:e.id,position:e.position,status:this._nodeStatuses.get(e.id)}))}
|
|
709
|
-
.viewport=${this._viewport}
|
|
710
|
-
.containerWidth=${this._containerWidth}
|
|
711
|
-
.containerHeight=${this._containerHeight}
|
|
712
|
-
@viewport-change=${this._onMinimapViewportChange}
|
|
713
|
-
></ic-graph-minimap>
|
|
714
|
-
</div>
|
|
715
|
-
</div>
|
|
716
|
-
|
|
717
|
-
${this._selectedNode?l`
|
|
718
|
-
<ic-node-detail-panel
|
|
719
|
-
.node=${this._selectedNode}
|
|
720
|
-
.allNodes=${t.nodes}
|
|
721
|
-
@close=${this._onDetailClose}
|
|
722
|
-
@steer=${this._onSteer}
|
|
723
|
-
></ic-node-detail-panel>
|
|
724
|
-
`:h}
|
|
725
|
-
</div>
|
|
726
|
-
|
|
727
|
-
<ic-execution-timeline
|
|
728
|
-
.nodes=${t.nodes}
|
|
729
|
-
.executionOrder=${t.executionOrder}
|
|
730
|
-
.elapsedMs=${t.elapsedMs}
|
|
731
|
-
.selectedNodeId=${t.selectedNodeId}
|
|
732
|
-
@node-inspect=${this._onNodeInspect}
|
|
733
|
-
></ic-execution-timeline>
|
|
734
|
-
`}
|
|
735
|
-
</div>
|
|
736
|
-
|
|
737
|
-
<!-- A11Y-03: ARIA live region for execution event announcements -->
|
|
738
|
-
<div class="sr-only" role="status" aria-live="polite" aria-atomic="true">
|
|
739
|
-
${this._liveAnnouncement}
|
|
740
|
-
</div>
|
|
741
|
-
|
|
742
|
-
<!-- Cancel confirmation dialog -->
|
|
743
|
-
<ic-confirm-dialog
|
|
744
|
-
?open=${this._showCancelConfirm}
|
|
745
|
-
title="Cancel Pipeline"
|
|
746
|
-
message="Are you sure you want to cancel this pipeline execution? Running nodes will be terminated."
|
|
747
|
-
variant="danger"
|
|
748
|
-
confirmLabel="Cancel Pipeline"
|
|
749
|
-
@confirm=${this._onCancelConfirm}
|
|
750
|
-
@cancel=${()=>{this._showCancelConfirm=!1}}
|
|
751
|
-
></ic-confirm-dialog>
|
|
644
|
+
`]}_computeBounds(){if(!this.nodes.length)return{minX:0,minY:0,maxX:400,maxY:300,graphW:400,graphH:300};let e=1/0,t=1/0,n=-1/0,r=-1/0;for(let i of this.nodes)e=Math.min(e,i.position.x),t=Math.min(t,i.position.y),n=Math.max(n,i.position.x+200),r=Math.max(r,i.position.y+80);return e-=40,t-=40,n+=40,r+=40,{minX:e,minY:t,maxX:n,maxY:r,graphW:n-e,graphH:r-t}}_computeScale(e,t){let n=A-M*2,r=j-M*2;return Math.min(n/e,r/t,1)}render(){let e=this._computeBounds(),n=this._computeScale(e.graphW,e.graphH),r=e.graphW*n,a=e.graphH*n,o=(A-r)/2,s=(j-a)/2,c=this.nodes.map(t=>i`<rect x="${o+(t.position.x-e.minX)*n}" y="${s+(t.position.y-e.minY)*n}" width="${Math.max(200*n,N)}" height="${Math.max(80*n,P)}" fill="${F[t.status??`pending`]??F.pending}" rx="1" />`),l=this.viewport,d=-l.x/l.scale,f=-l.y/l.scale,p=this.containerWidth/l.scale,m=this.containerHeight/l.scale,h=o+(d-e.minX)*n,g=s+(f-e.minY)*n,_=p*n,v=m*n,y=_<A*.95||v<j*.95;return t`
|
|
645
|
+
<svg
|
|
646
|
+
viewBox="0 0 ${A} ${j}"
|
|
647
|
+
@pointerdown=${this._onPointerDown}
|
|
648
|
+
@pointermove=${this._onPointerMove}
|
|
649
|
+
@pointerup=${this._onPointerUp}
|
|
650
|
+
@pointercancel=${this._onPointerUp}
|
|
651
|
+
>
|
|
652
|
+
<!-- Node dots -->
|
|
653
|
+
${c}
|
|
752
654
|
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
<div class="node-list">
|
|
764
|
-
${t.nodes.map(s=>l`
|
|
765
|
-
<div class="node-item">
|
|
766
|
-
<span class="status-dot" style="background: ${e[s.status]??"#6b7280"}"></span>
|
|
767
|
-
<span>${s.id}: ${s.status}</span>
|
|
768
|
-
</div>
|
|
769
|
-
`)}
|
|
770
|
-
</div>
|
|
771
|
-
</div>
|
|
772
|
-
`}};O.styles=[F,ht,B`
|
|
655
|
+
<!-- Viewport rectangle -->
|
|
656
|
+
${y?i`
|
|
657
|
+
<rect class="viewport-fill" x="${h}" y="${g}" width="${_}" height="${v}" />
|
|
658
|
+
<rect
|
|
659
|
+
class="viewport-rect ${this._dragging?`dragging`:``}"
|
|
660
|
+
x="${h}" y="${g}" width="${_}" height="${v}"
|
|
661
|
+
/>
|
|
662
|
+
`:u}
|
|
663
|
+
</svg>
|
|
664
|
+
`}};l([c({attribute:!1})],I.prototype,`nodes`,void 0),l([c({attribute:!1})],I.prototype,`viewport`,void 0),l([c({type:Number})],I.prototype,`containerWidth`,void 0),l([c({type:Number})],I.prototype,`containerHeight`,void 0),l([o()],I.prototype,`_dragging`,void 0),I=l([e(`ic-graph-minimap`)],I);var L=class extends r{constructor(...e){super(...e),this.rpcClient=null,this.graphId=``,this.eventDispatcher=null,this._snapshot=null,this._viewport={x:0,y:0,scale:1},this._showCancelConfirm=!1,this._liveAnnouncement=``,this._monitorState=null,this._stateUnsub=null,this._sseUnsubs=[],this._previousNodeStatuses=new Map,this._containerWidth=800,this._containerHeight=600,this._resizeObserver=null}static{this.styles=[s,a,n`
|
|
773
665
|
:host { display: block; height: 100%; }
|
|
774
666
|
|
|
775
667
|
.monitor-container {
|
|
@@ -969,4 +861,112 @@ import{s as F,i as B,n as g,a as G,b as l,t as q,f as ht,r as P,A as h,w as H,I
|
|
|
969
861
|
flex-shrink: 0;
|
|
970
862
|
}
|
|
971
863
|
}
|
|
972
|
-
`]
|
|
864
|
+
`]}connectedCallback(){super.connectedCallback(),this._monitorState=g(),this._stateUnsub=this._monitorState.subscribe(()=>{let e=this._monitorState.getSnapshot();this._snapshot=e,this._announceNodeChanges(e.nodes)}),this._initMonitor()}firstUpdated(){let e=this.renderRoot.querySelector(`.canvas-area`);e&&(this._resizeObserver=new ResizeObserver(e=>{for(let t of e)this._containerWidth=t.contentRect.width,this._containerHeight=t.contentRect.height}),this._resizeObserver.observe(e))}disconnectedCallback(){for(let e of this._sseUnsubs)e();this._sseUnsubs=[],this._monitorState?.destroy(),this._monitorState=null,this._stateUnsub?.(),this._stateUnsub=null,this._resizeObserver?.disconnect(),this._resizeObserver=null,this._previousNodeStatuses.clear(),super.disconnectedCallback()}async _initMonitor(){if(!this.rpcClient||!this.graphId||!this._monitorState)return;let e=[],t=[];try{let n=await this.rpcClient.call(`graph.load`,{id:this.graphId});if(n?.nodes?.length){let r=n.nodes.map(e=>({id:e.id??e.nodeId,task:e.task??``,agentId:e.agentId??e.agent,dependsOn:e.dependsOn??[],maxSteps:e.maxSteps,timeoutMs:e.timeoutMs,barrierMode:e.barrierMode,modelId:e.modelId??e.model,position:e.position??{x:0,y:0}})),i=n.edges&&n.edges.length>0?n.edges:r.flatMap(e=>e.dependsOn.map(t=>({id:`${t}->${e.id}`,source:t,target:e.id})));if(r.length>0&&r.every(e=>e.position.x===0&&e.position.y===0)){let e=p(r,i);for(let t of r){let n=e.positions.get(t.id);n&&(t.position=n)}}e=r,t=i}}catch{}if(e.length===0)try{let n=await this.rpcClient.call(`graph.status`,{graphId:this.graphId}),r=n.executionOrder.map(e=>({id:e,task:e,dependsOn:[],position:{x:0,y:0}})),i=[];if(r.length>1)for(let e=1;e<n.executionOrder.length;e++)i.push({id:`${n.executionOrder[e-1]}->${n.executionOrder[e]}`,source:n.executionOrder[e-1],target:n.executionOrder[e]});let a=p(r,i);e=r.map(e=>{let t=a.positions.get(e.id);return t?{...e,position:t}:e}),t=i}catch{e=[],t=[]}e.length>0&&(this._monitorState.startPolling(this.rpcClient,this.graphId,e,t),setTimeout(()=>{e.length>0&&(this._viewport=f(e,this._containerWidth||800,this._containerHeight||600))},200),this._wireSSE())}_wireSSE(){for(let e of this._sseUnsubs)e();if(this._sseUnsubs=[],!this.eventDispatcher||!this._monitorState)return;for(let e of[`graph:started`,`graph:node_updated`,`graph:completed`])this._sseUnsubs.push(this.eventDispatcher.addEventListener(e,t=>{t.graphId===this.graphId&&this._monitorState?.applyEvent(e,t)}));this.eventDispatcher.connected&&this._monitorState.suspendPolling();let e=this.eventDispatcher.connected,t=setInterval(()=>{if(!this.eventDispatcher||!this._monitorState)return;let t=this.eventDispatcher.connected;t&&!e?(this._monitorState.resumePolling(),setTimeout(()=>{this._monitorState?.suspendPolling()},500)):!t&&e&&this._monitorState.resumePolling(),e=t},3e3);this._sseUnsubs.push(()=>clearInterval(t))}get _breadcrumbs(){return[{label:`Pipelines`,route:`pipelines`},{label:this.graphId||`Monitor`}]}get _nodeStatuses(){let e=new Map;if(!this._snapshot)return e;for(let t of this._snapshot.nodes)e.set(t.id,t.status);return e}get _edgeStatuses(){let e=new Map;if(!this._snapshot)return e;let t=this._nodeStatuses;for(let n of this._snapshot.edges){let r=t.get(n.source)??``,i=t.get(n.target)??``;r===`completed`&&i===`completed`?e.set(n.id,`completed`):r===`running`||i===`running`?e.set(n.id,`running`):r===`failed`||i===`failed`?e.set(n.id,`failed`):(r===`skipped`||i===`skipped`)&&e.set(n.id,`skipped`)}return e}get _selectedNode(){return this._snapshot?.selectedNodeId?this._snapshot.nodes.find(e=>e.id===this._snapshot.selectedNodeId)??null:null}get _canvasNodes(){return this._snapshot?this._snapshot.nodes.map(e=>({id:e.id,task:e.task,agentId:e.agentId,dependsOn:e.dependsOn,position:e.position})):[]}_announceNodeChanges(e){let t=[];for(let n of e)if(this._previousNodeStatuses.get(n.id)!==n.status)switch(n.status){case`running`:t.push(`Node ${n.id} started executing`);break;case`completed`:t.push(`Node ${n.id} completed successfully`);break;case`failed`:t.push(`Node ${n.id} failed`);break}this._previousNodeStatuses.clear();for(let t of e)this._previousNodeStatuses.set(t.id,t.status);t.length>0&&(this._liveAnnouncement=t.join(`. `))}_onNodeInspect(e){this._monitorState?.selectNode(e.detail.nodeId)}_onCanvasClick(){this._monitorState?.selectNode(null)}_onViewportChange(e){this._viewport=e.detail}_onMinimapViewportChange(e){this._viewport=e.detail}_onCancelRequest(){this._showCancelConfirm=!0}async _onCancelConfirm(){if(this._showCancelConfirm=!1,this.rpcClient)try{await this.rpcClient.call(`graph.cancel`,{graphId:this.graphId}),d.show(`Pipeline cancelled`,`warning`)}catch(e){d.show(`Cancel failed: ${e instanceof Error?e.message:String(e)}`,`error`)}}async _onSteer(e){if(this.rpcClient)try{await this.rpcClient.call(`subagent.steer`,{target:e.detail.runId,message:e.detail.message}),d.show(`Steer message sent`,`success`)}catch(e){d.show(`Steer failed: ${e instanceof Error?e.message:String(e)}`,`error`)}}_onDetailClose(){this._monitorState?.selectNode(null)}_onViewOutputs(){this.graphId&&(window.location.hash=`#/pipelines/history/${this.graphId}`)}render(){let e=this._snapshot;return t`
|
|
865
|
+
<ic-breadcrumb .items=${this._breadcrumbs}
|
|
866
|
+
@navigate=${e=>this.dispatchEvent(new CustomEvent(`navigate`,{detail:e.detail,bubbles:!0,composed:!0}))}
|
|
867
|
+
></ic-breadcrumb>
|
|
868
|
+
|
|
869
|
+
${this._renderMobileSummary(e)}
|
|
870
|
+
|
|
871
|
+
<div class="monitor-container">
|
|
872
|
+
${e?.error&&!e.loading?t`
|
|
873
|
+
<div class="error-banner">
|
|
874
|
+
<span>${e.error}</span>
|
|
875
|
+
<button @click=${()=>this._initMonitor()}>Retry</button>
|
|
876
|
+
</div>
|
|
877
|
+
`:u}
|
|
878
|
+
|
|
879
|
+
${!e||e.loading?t`<div class="loading-container">Loading execution data...</div>`:t`
|
|
880
|
+
<ic-monitor-status-bar
|
|
881
|
+
.graphStatus=${e.graphStatus}
|
|
882
|
+
?isTerminal=${e.isTerminal}
|
|
883
|
+
.elapsedMs=${e.elapsedMs}
|
|
884
|
+
.stats=${e.stats}
|
|
885
|
+
@cancel=${this._onCancelRequest}
|
|
886
|
+
@view-outputs=${this._onViewOutputs}
|
|
887
|
+
></ic-monitor-status-bar>
|
|
888
|
+
|
|
889
|
+
<div class="monitor-body">
|
|
890
|
+
<div class="canvas-area">
|
|
891
|
+
<ic-graph-canvas
|
|
892
|
+
read-only
|
|
893
|
+
.viewport=${this._viewport}
|
|
894
|
+
.nodes=${this._canvasNodes}
|
|
895
|
+
.edges=${e.edges}
|
|
896
|
+
.selectedNodeIds=${new Set}
|
|
897
|
+
.selectedEdgeId=${null}
|
|
898
|
+
.nodeStatuses=${this._nodeStatuses}
|
|
899
|
+
.edgeStatuses=${this._edgeStatuses}
|
|
900
|
+
.highlightNodeIds=${[]}
|
|
901
|
+
@viewport-change=${this._onViewportChange}
|
|
902
|
+
@node-inspect=${this._onNodeInspect}
|
|
903
|
+
@canvas-click=${this._onCanvasClick}
|
|
904
|
+
></ic-graph-canvas>
|
|
905
|
+
|
|
906
|
+
<div class="minimap-container">
|
|
907
|
+
<ic-graph-minimap
|
|
908
|
+
.nodes=${this._canvasNodes.map(e=>({id:e.id,position:e.position,status:this._nodeStatuses.get(e.id)}))}
|
|
909
|
+
.viewport=${this._viewport}
|
|
910
|
+
.containerWidth=${this._containerWidth}
|
|
911
|
+
.containerHeight=${this._containerHeight}
|
|
912
|
+
@viewport-change=${this._onMinimapViewportChange}
|
|
913
|
+
></ic-graph-minimap>
|
|
914
|
+
</div>
|
|
915
|
+
</div>
|
|
916
|
+
|
|
917
|
+
${this._selectedNode?t`
|
|
918
|
+
<ic-node-detail-panel
|
|
919
|
+
.node=${this._selectedNode}
|
|
920
|
+
.allNodes=${e.nodes}
|
|
921
|
+
@close=${this._onDetailClose}
|
|
922
|
+
@steer=${this._onSteer}
|
|
923
|
+
></ic-node-detail-panel>
|
|
924
|
+
`:u}
|
|
925
|
+
</div>
|
|
926
|
+
|
|
927
|
+
<ic-execution-timeline
|
|
928
|
+
.nodes=${e.nodes}
|
|
929
|
+
.executionOrder=${e.executionOrder}
|
|
930
|
+
.elapsedMs=${e.elapsedMs}
|
|
931
|
+
.selectedNodeId=${e.selectedNodeId}
|
|
932
|
+
@node-inspect=${this._onNodeInspect}
|
|
933
|
+
></ic-execution-timeline>
|
|
934
|
+
`}
|
|
935
|
+
</div>
|
|
936
|
+
|
|
937
|
+
<!-- A11Y-03: ARIA live region for execution event announcements -->
|
|
938
|
+
<div class="sr-only" role="status" aria-live="polite" aria-atomic="true">
|
|
939
|
+
${this._liveAnnouncement}
|
|
940
|
+
</div>
|
|
941
|
+
|
|
942
|
+
<!-- Cancel confirmation dialog -->
|
|
943
|
+
<ic-confirm-dialog
|
|
944
|
+
?open=${this._showCancelConfirm}
|
|
945
|
+
title="Cancel Pipeline"
|
|
946
|
+
message="Are you sure you want to cancel this pipeline execution? Running nodes will be terminated."
|
|
947
|
+
variant="danger"
|
|
948
|
+
confirmLabel="Cancel Pipeline"
|
|
949
|
+
@confirm=${this._onCancelConfirm}
|
|
950
|
+
@cancel=${()=>{this._showCancelConfirm=!1}}
|
|
951
|
+
></ic-confirm-dialog>
|
|
952
|
+
|
|
953
|
+
<!-- View Outputs navigates to history detail page -->
|
|
954
|
+
`}_renderMobileSummary(e){if(!e)return t`
|
|
955
|
+
<div class="mobile-summary">
|
|
956
|
+
<h2>Pipeline Monitor</h2>
|
|
957
|
+
<p>Loading...</p>
|
|
958
|
+
</div>
|
|
959
|
+
`;let n={pending:`#6b7280`,ready:`#a78bfa`,running:`#06b6d4`,completed:`#22c55e`,failed:`#ef4444`,skipped:`#9ca3af`};return t`
|
|
960
|
+
<div class="mobile-summary">
|
|
961
|
+
<h2>Pipeline: ${e.graphId}</h2>
|
|
962
|
+
<p>Status: ${e.graphStatus} | ${e.stats.completed}/${e.stats.total} complete</p>
|
|
963
|
+
<div class="node-list">
|
|
964
|
+
${e.nodes.map(e=>t`
|
|
965
|
+
<div class="node-item">
|
|
966
|
+
<span class="status-dot" style="background: ${n[e.status]??`#6b7280`}"></span>
|
|
967
|
+
<span>${e.id}: ${e.status}</span>
|
|
968
|
+
</div>
|
|
969
|
+
`)}
|
|
970
|
+
</div>
|
|
971
|
+
</div>
|
|
972
|
+
`}};l([c({attribute:!1})],L.prototype,`rpcClient`,void 0),l([c()],L.prototype,`graphId`,void 0),l([c({attribute:!1})],L.prototype,`eventDispatcher`,void 0),l([o()],L.prototype,`_snapshot`,void 0),l([o()],L.prototype,`_viewport`,void 0),l([o()],L.prototype,`_showCancelConfirm`,void 0),l([o()],L.prototype,`_liveAnnouncement`,void 0),L=l([e(`ic-pipeline-monitor`)],L);export{L as IcPipelineMonitor};
|