@worca/ui 0.10.0 → 0.11.0-rc.1

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/app/styles.css CHANGED
@@ -3889,7 +3889,12 @@ sl-details.learnings-panel::part(content) {
3889
3889
  .run-card-actions {
3890
3890
  display: flex;
3891
3891
  align-items: center;
3892
- margin-left: auto;
3892
+ justify-content: flex-end;
3893
+ gap: 8px;
3894
+ padding-left: 26px;
3895
+ }
3896
+ .run-card-actions:empty {
3897
+ display: none;
3893
3898
  }
3894
3899
  .btn-quick-resume {
3895
3900
  display: inline-flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worca/ui",
3
- "version": "0.10.0",
3
+ "version": "0.11.0-rc.1",
4
4
  "description": "Pipeline monitoring UI for worca-cc",
5
5
  "license": "MIT",
6
6
  "author": "Sinisha Djukic",
@@ -185,7 +185,8 @@ export class ProcessManager {
185
185
  if (!status.stop_reason) {
186
186
  status.stop_reason = 'stale';
187
187
  }
188
- status.pipeline_status = 'failed';
188
+ status.pipeline_status =
189
+ status.stop_reason === 'signal' ? 'interrupted' : 'failed';
189
190
  try {
190
191
  writeFileSync(
191
192
  statusPath,
@@ -197,8 +198,8 @@ export class ProcessManager {
197
198
  /* ignore */
198
199
  }
199
200
 
200
- // Append synthetic failed event if no terminal event exists yet.
201
- // Status is "failed" (process crash), so the event type must match.
201
+ // Append synthetic terminal event if none exists yet.
202
+ // Use pipeline.run.interrupted for signal-killed runs, pipeline.run.failed otherwise.
202
203
  const eventsPath = join(this.worcaDir, 'runs', runId, 'events.jsonl');
203
204
  let hasTerminalEvent = false;
204
205
  if (existsSync(eventsPath)) {
@@ -219,6 +220,10 @@ export class ProcessManager {
219
220
  }
220
221
  }
221
222
  if (!hasTerminalEvent) {
223
+ const eventType =
224
+ status.stop_reason === 'signal'
225
+ ? 'pipeline.run.interrupted'
226
+ : 'pipeline.run.failed';
222
227
  const payload = {
223
228
  failed_stage: status.current_stage ?? 'unknown',
224
229
  elapsed_ms: elapsedMsSince(status.started_at),
@@ -230,7 +235,7 @@ export class ProcessManager {
230
235
  dispatchExternal({
231
236
  runDir: join(this.worcaDir, 'runs', runId),
232
237
  settingsPath: this.settingsPath,
233
- eventType: 'pipeline.run.failed',
238
+ eventType,
234
239
  payload,
235
240
  }).catch(() => {}),
236
241
  );
@@ -239,7 +244,7 @@ export class ProcessManager {
239
244
  const evt = {
240
245
  schema_version: '1',
241
246
  event_id: randomUUID(),
242
- event_type: 'pipeline.run.failed',
247
+ event_type: eventType,
243
248
  timestamp: new Date().toISOString(),
244
249
  run_id: status.run_id ?? runId,
245
250
  pipeline: {