@tea-agent/loop-agent 0.32.1 → 0.33.0

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 (33) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/executors/model-routing.js +14 -4
  3. package/dist/governance/manifest-types.js +34 -7
  4. package/dist/worker/console/chat/model-resolver.js +114 -34
  5. package/dist/worker/console/chat/workspace-landing.js +58 -22
  6. package/dist/worker/console/doctor.js +1 -0
  7. package/dist/worker/console/night-aux-ticker.js +5 -0
  8. package/dist/worker/console/pi-readiness.js +26 -17
  9. package/dist/worker/console/server.js +2 -0
  10. package/dist/worker/console/static/assets/index-3R-GT3a_.js +29 -0
  11. package/dist/worker/console/static/assets/index-B0EQt_yq.css +1 -0
  12. package/dist/worker/console/static/index.html +2 -2
  13. package/dist/worker/console/static-src/night/useNightBoard.js +0 -31
  14. package/dist/worker/observability/read-model.js +106 -0
  15. package/dist/worker/observe/routes.js +19 -1
  16. package/dist/worker/observe/static/api.js +42 -3
  17. package/dist/worker/observe/static/app.js +4 -0
  18. package/dist/worker/observe/static/constants.js +10 -0
  19. package/dist/worker/observe/static/custom-select.js +567 -0
  20. package/dist/worker/observe/static/index.html +47 -6
  21. package/dist/worker/observe/static/router.js +54 -1
  22. package/dist/worker/observe/static/state.js +20 -0
  23. package/dist/worker/observe/static/styles.css +618 -30
  24. package/dist/worker/observe/static/views/dag-inspector.js +20 -17
  25. package/dist/worker/observe/static/views/dag.js +136 -59
  26. package/dist/worker/observe/static/views/dags.js +877 -0
  27. package/dist/worker/observe/static/views/dashboard.js +15 -4
  28. package/dist/workflows/dag/init-hybrid.js +58 -29
  29. package/docs/templates/harness.schema.json +5 -0
  30. package/harness.json +4 -4
  31. package/package.json +1 -1
  32. package/dist/worker/console/static/assets/index-Bpa2qrc-.js +0 -29
  33. package/dist/worker/console/static/assets/index-BqfFDdnG.css +0 -1
@@ -456,42 +456,65 @@ td:first-child,
456
456
  .view-pool .page-header-heading {
457
457
  margin-bottom: 0;
458
458
  }
459
- .pool-toolbar {
460
- display: grid;
461
- justify-items: end;
462
- gap: 8px;
463
- padding-top: 2px;
464
- }
465
- .pool-toolbar-actions {
459
+ .page-header-actions {
466
460
  display: flex;
467
461
  flex-wrap: wrap;
468
462
  align-items: center;
469
463
  justify-content: flex-end;
470
464
  gap: 10px 12px;
465
+ padding-top: 2px;
471
466
  }
472
- .pool-toolbar .pool-updated-at {
473
- margin: 0;
474
- max-width: 28ch;
475
- font-size: 11px;
476
- line-height: 1.4;
477
- text-align: right;
478
- }
467
+ .page-action-btn,
479
468
  .pool-refresh-btn {
480
469
  appearance: none;
470
+ display: inline-flex;
471
+ align-items: center;
472
+ justify-content: center;
473
+ min-height: 34px;
474
+ padding: 8px 14px;
481
475
  border: 1px solid var(--hairline);
482
476
  border-radius: var(--radius-pill);
483
477
  background: var(--surface);
484
478
  color: var(--ink);
485
479
  font-size: 13px;
486
480
  font-weight: 700;
487
- padding: 8px 14px;
481
+ line-height: 1.2;
482
+ text-decoration: none;
488
483
  cursor: pointer;
489
484
  box-shadow: var(--shadow-panel);
485
+ transition:
486
+ background-color var(--transition-fast),
487
+ border-color var(--transition-fast),
488
+ color var(--transition-fast);
490
489
  }
491
- .pool-refresh-btn:hover {
490
+ .page-action-btn:hover,
491
+ .page-action-btn:focus-visible,
492
+ .pool-refresh-btn:hover,
493
+ .pool-refresh-btn:focus-visible {
492
494
  border-color: var(--orange);
493
495
  color: var(--orange-active);
494
496
  background: var(--orange-soft);
497
+ outline: none;
498
+ }
499
+ .pool-toolbar {
500
+ display: grid;
501
+ justify-items: end;
502
+ gap: 8px;
503
+ padding-top: 2px;
504
+ }
505
+ .pool-toolbar-actions {
506
+ display: flex;
507
+ flex-wrap: wrap;
508
+ align-items: center;
509
+ justify-content: flex-end;
510
+ gap: 10px 12px;
511
+ }
512
+ .pool-toolbar .pool-updated-at {
513
+ margin: 0;
514
+ max-width: 28ch;
515
+ font-size: 11px;
516
+ line-height: 1.4;
517
+ text-align: right;
495
518
  }
496
519
  .pool-auto-refresh-label {
497
520
  display: inline-flex;
@@ -1471,12 +1494,11 @@ body.is-resizing-dag-graph {
1471
1494
  color: var(--muted);
1472
1495
  }
1473
1496
  .dag-inspector-attempt-select {
1474
- font-size: 12px;
1475
- padding: 2px 6px;
1476
- border: 1px solid var(--hairline);
1477
- border-radius: 6px;
1478
- background: var(--surface);
1479
- color: var(--ink);
1497
+ /* Shared custom-select surface; keep class for integration hooks. */
1498
+ min-width: 9.5rem;
1499
+ }
1500
+ .dag-inspector-attempt-bar .custom-select-menu {
1501
+ z-index: 5;
1480
1502
  }
1481
1503
  .dag-inspector-attempt-preview {
1482
1504
  display: flex;
@@ -1892,9 +1914,10 @@ body.is-resizing-dag-graph {
1892
1914
  .dag-node-table {
1893
1915
  table-layout: fixed;
1894
1916
  }
1917
+ /* 9 columns sum to 100%: 4/17/6/8/14/9/8/14/20 */
1895
1918
  .dag-node-table th:nth-child(1),
1896
1919
  .dag-node-table td:nth-child(1) {
1897
- width: 5%;
1920
+ width: 4%;
1898
1921
  }
1899
1922
  .dag-node-table th:nth-child(2),
1900
1923
  .dag-node-table td:nth-child(2) {
@@ -1902,27 +1925,31 @@ body.is-resizing-dag-graph {
1902
1925
  }
1903
1926
  .dag-node-table th:nth-child(3),
1904
1927
  .dag-node-table td:nth-child(3) {
1905
- width: 7%;
1928
+ width: 6%;
1906
1929
  }
1907
1930
  .dag-node-table th:nth-child(4),
1908
1931
  .dag-node-table td:nth-child(4) {
1909
- width: 11%;
1932
+ width: 8%;
1910
1933
  }
1911
1934
  .dag-node-table th:nth-child(5),
1912
1935
  .dag-node-table td:nth-child(5) {
1913
- width: 15%;
1936
+ width: 14%;
1914
1937
  }
1915
1938
  .dag-node-table th:nth-child(6),
1916
1939
  .dag-node-table td:nth-child(6) {
1917
- width: 11%;
1940
+ width: 9%;
1918
1941
  }
1919
1942
  .dag-node-table th:nth-child(7),
1920
1943
  .dag-node-table td:nth-child(7) {
1921
- width: 9%;
1944
+ width: 8%;
1922
1945
  }
1923
1946
  .dag-node-table th:nth-child(8),
1924
1947
  .dag-node-table td:nth-child(8) {
1925
- width: 25%;
1948
+ width: 14%;
1949
+ }
1950
+ .dag-node-table th:nth-child(9),
1951
+ .dag-node-table td:nth-child(9) {
1952
+ width: 20%;
1926
1953
  }
1927
1954
  .dag-node-table th:first-child,
1928
1955
  .dag-node-table td:first-child {
@@ -1930,9 +1957,19 @@ body.is-resizing-dag-graph {
1930
1957
  }
1931
1958
  .dag-node-table td:nth-child(2),
1932
1959
  .dag-node-table td:nth-child(5),
1933
- .dag-node-table td:nth-child(8) {
1960
+ .dag-node-table td:nth-child(8),
1961
+ .dag-node-table td:nth-child(9) {
1934
1962
  overflow-wrap: anywhere;
1935
1963
  }
1964
+ .dag-node-error-summary {
1965
+ display: -webkit-box;
1966
+ -webkit-box-orient: vertical;
1967
+ -webkit-line-clamp: 2;
1968
+ line-clamp: 2;
1969
+ overflow: hidden;
1970
+ color: var(--red);
1971
+ word-break: break-word;
1972
+ }
1936
1973
  .dag-active-node {
1937
1974
  background: #fff8f3;
1938
1975
  }
@@ -3154,3 +3191,554 @@ button.copy-command:focus-visible {
3154
3191
  transition-duration: 0.01ms !important;
3155
3192
  }
3156
3193
  }
3194
+
3195
+ /* Formal DAG run history page (#/dags) */
3196
+ .section-heading-row {
3197
+ display: flex;
3198
+ align-items: center;
3199
+ justify-content: space-between;
3200
+ gap: var(--space-3, 0.75rem);
3201
+ margin: 0 0 var(--space-3, 0.75rem);
3202
+ }
3203
+ .section-heading-row .section-heading {
3204
+ margin: 0;
3205
+ }
3206
+ .section-heading-action {
3207
+ flex-shrink: 0;
3208
+ font-size: 13px;
3209
+ font-weight: 600;
3210
+ color: var(--orange-active, #c45c26);
3211
+ text-decoration: none;
3212
+ }
3213
+ .section-heading-action:hover,
3214
+ .section-heading-action:focus-visible {
3215
+ text-decoration: underline;
3216
+ }
3217
+ .view-dags .dags-table-wrap,
3218
+ .dags-table-wrap.table-scroll {
3219
+ overflow-x: auto;
3220
+ -webkit-overflow-scrolling: touch;
3221
+ }
3222
+ .dags-history-table {
3223
+ width: 100%;
3224
+ min-width: 720px;
3225
+ border-collapse: collapse;
3226
+ }
3227
+ .dags-run-id-wrap {
3228
+ display: inline-flex;
3229
+ align-items: center;
3230
+ gap: 0.35rem;
3231
+ max-width: 100%;
3232
+ }
3233
+ .dags-run-id {
3234
+ font-size: 12px;
3235
+ overflow-wrap: anywhere;
3236
+ word-break: break-all;
3237
+ }
3238
+ .dags-copy-btn,
3239
+ .dags-copy-btn-icon {
3240
+ flex-shrink: 0;
3241
+ display: inline-flex;
3242
+ align-items: center;
3243
+ justify-content: center;
3244
+ width: 30px;
3245
+ height: 30px;
3246
+ padding: 0;
3247
+ border: 1px solid var(--hairline, #e2dcd4);
3248
+ border-radius: var(--radius-md, 6px);
3249
+ background: var(--surface, #fff);
3250
+ color: var(--ink, #1c1917);
3251
+ cursor: pointer;
3252
+ line-height: 1;
3253
+ }
3254
+ .dags-copy-btn:hover {
3255
+ border-color: var(--hairline-strong, #cfcdc4);
3256
+ background: var(--surface-muted, #f0efe9);
3257
+ }
3258
+ .dags-copy-btn:active {
3259
+ border-color: var(--hairline-strong, #cfcdc4);
3260
+ background: color-mix(in srgb, var(--surface-muted, #f0efe9) 80%, var(--hairline, #e6e5e0));
3261
+ }
3262
+ /* Mouse focus must not leave residual orange chrome; orange is :focus-visible only. */
3263
+ .dags-copy-btn:focus:not(:focus-visible) {
3264
+ outline: none;
3265
+ border-color: var(--hairline, #e2dcd4);
3266
+ }
3267
+ .dags-copy-btn:focus-visible {
3268
+ border-color: var(--orange-active, #c45c26);
3269
+ outline: 2px solid color-mix(in srgb, var(--orange) 55%, transparent);
3270
+ outline-offset: 1px;
3271
+ }
3272
+ .dags-copy-btn .dags-copy-icon {
3273
+ display: block;
3274
+ }
3275
+ .dags-copy-btn .dags-copy-icon-check {
3276
+ display: none;
3277
+ }
3278
+ .dags-copy-btn.is-copied {
3279
+ color: var(--green, #1f8a65);
3280
+ border-color: var(--hairline, #e2dcd4);
3281
+ }
3282
+ .dags-copy-btn.is-copied:hover,
3283
+ .dags-copy-btn.is-copied:active {
3284
+ border-color: var(--hairline-strong, #cfcdc4);
3285
+ }
3286
+ .dags-copy-btn.is-copied .dags-copy-icon-rects {
3287
+ display: none;
3288
+ }
3289
+ .dags-copy-btn.is-copied .dags-copy-icon-check {
3290
+ display: block;
3291
+ }
3292
+ /* Copy success must never paint row / cell / run-id container chrome. */
3293
+ .dags-history-row.is-copied,
3294
+ .dags-run-id-cell.is-copied,
3295
+ .dags-run-id-wrap.is-copied {
3296
+ background: transparent;
3297
+ border-color: inherit;
3298
+ box-shadow: none;
3299
+ }
3300
+ .dags-copy-toast {
3301
+ position: fixed;
3302
+ right: 24px;
3303
+ bottom: 24px;
3304
+ z-index: 50;
3305
+ max-width: min(360px, calc(100vw - 32px));
3306
+ padding: 10px 14px;
3307
+ border: 1px solid var(--hairline-strong, #cfcdc4);
3308
+ border-radius: var(--radius-md, 8px);
3309
+ background: var(--surface, #fff);
3310
+ color: var(--ink, #1c1917);
3311
+ box-shadow: var(--shadow-soft);
3312
+ font-size: 13px;
3313
+ pointer-events: none;
3314
+ }
3315
+ .dags-copy-toast[hidden] {
3316
+ display: none !important;
3317
+ }
3318
+ .sr-only {
3319
+ position: absolute;
3320
+ width: 1px;
3321
+ height: 1px;
3322
+ padding: 0;
3323
+ margin: -1px;
3324
+ overflow: hidden;
3325
+ clip: rect(0, 0, 0, 0);
3326
+ white-space: nowrap;
3327
+ border: 0;
3328
+ }
3329
+ .dags-pagination {
3330
+ display: grid;
3331
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
3332
+ align-items: center;
3333
+ column-gap: 1rem;
3334
+ row-gap: 0.75rem;
3335
+ width: 100%;
3336
+ min-width: 0;
3337
+ }
3338
+ .dags-pagination-summary {
3339
+ min-width: 0;
3340
+ justify-self: start;
3341
+ text-align: left;
3342
+ }
3343
+ .dags-pagination-summary .dags-meta {
3344
+ margin: 0;
3345
+ }
3346
+ .dags-pagination-pages {
3347
+ display: inline-flex;
3348
+ flex-wrap: nowrap;
3349
+ align-items: center;
3350
+ justify-content: center;
3351
+ gap: 2px;
3352
+ justify-self: center;
3353
+ flex: 0 0 auto;
3354
+ max-width: 100%;
3355
+ padding: 5px;
3356
+ border: 1px solid var(--hairline, #e6e5e0);
3357
+ border-radius: 14px;
3358
+ background: var(--surface, #ffffff);
3359
+ box-shadow:
3360
+ 0 1px 2px rgb(38 37 30 / 4%),
3361
+ 0 4px 12px rgb(38 37 30 / 3%);
3362
+ }
3363
+ .dags-pagination-tools {
3364
+ display: inline-flex;
3365
+ flex-wrap: wrap;
3366
+ align-items: center;
3367
+ justify-content: flex-end;
3368
+ gap: 0.5rem;
3369
+ justify-self: end;
3370
+ min-width: 0;
3371
+ }
3372
+ .dags-page-num,
3373
+ .dags-page-nav {
3374
+ box-sizing: border-box;
3375
+ display: inline-flex;
3376
+ align-items: center;
3377
+ justify-content: center;
3378
+ width: 36px;
3379
+ height: 36px;
3380
+ min-width: 36px;
3381
+ min-height: 36px;
3382
+ padding: 0;
3383
+ margin: 0;
3384
+ border: 1px solid transparent;
3385
+ border-radius: 10px;
3386
+ background: transparent;
3387
+ color: var(--ink, #26251e);
3388
+ font: inherit;
3389
+ font-size: 13px;
3390
+ font-weight: 500;
3391
+ line-height: 1;
3392
+ cursor: pointer;
3393
+ appearance: none;
3394
+ -webkit-appearance: none;
3395
+ transition:
3396
+ background var(--transition-fast, 160ms ease),
3397
+ color var(--transition-fast, 160ms ease),
3398
+ border-color var(--transition-fast, 160ms ease),
3399
+ box-shadow var(--transition-base, 220ms ease),
3400
+ opacity var(--transition-fast, 160ms ease);
3401
+ }
3402
+ .dags-page-num i,
3403
+ .dags-page-nav i,
3404
+ .dags-refresh-btn i {
3405
+ font-size: 18px;
3406
+ line-height: 1;
3407
+ pointer-events: none;
3408
+ }
3409
+ .dags-page-num:hover:not(:disabled),
3410
+ .dags-page-nav:hover:not(:disabled) {
3411
+ background: color-mix(in srgb, var(--orange-soft, #fff1ea) 70%, var(--surface-muted, #f0efe9));
3412
+ color: var(--ink, #26251e);
3413
+ }
3414
+ .dags-page-num:active:not(:disabled),
3415
+ .dags-page-nav:active:not(:disabled) {
3416
+ background: color-mix(in srgb, var(--orange, #f54e00) 14%, var(--surface-muted, #f0efe9));
3417
+ }
3418
+ .dags-page-num:focus-visible,
3419
+ .dags-page-nav:focus-visible,
3420
+ .dags-refresh-btn:focus-visible,
3421
+ .dags-page-size-label select:focus-visible,
3422
+ .dags-page-size-label .custom-select-trigger:focus-visible {
3423
+ outline: 2px solid color-mix(in srgb, var(--orange, #f54e00) 55%, transparent);
3424
+ outline-offset: 1px;
3425
+ }
3426
+ .dags-page-num.is-current,
3427
+ .dags-page-num.is-current:disabled,
3428
+ .dags-page-num.is-current:hover:disabled,
3429
+ .dags-page-num.is-current:active:disabled {
3430
+ background: var(--orange, #f54e00);
3431
+ border-color: var(--orange, #f54e00);
3432
+ color: #fff;
3433
+ opacity: 1;
3434
+ box-shadow: 0 2px 8px color-mix(in srgb, var(--orange, #f54e00) 35%, transparent);
3435
+ cursor: default;
3436
+ }
3437
+ .dags-page-nav:disabled,
3438
+ .dags-page-num:disabled:not(.is-current),
3439
+ .dags-refresh-btn:disabled,
3440
+ .dags-page-size-label select:disabled,
3441
+ .dags-page-size-label .custom-select.is-disabled .custom-select-trigger,
3442
+ .dags-page-size-label .custom-select-trigger:disabled {
3443
+ opacity: 0.45;
3444
+ cursor: not-allowed;
3445
+ }
3446
+ .dags-page-ellipsis {
3447
+ display: inline-flex;
3448
+ align-items: center;
3449
+ justify-content: center;
3450
+ width: 28px;
3451
+ min-width: 28px;
3452
+ height: 36px;
3453
+ color: var(--muted, #807d72);
3454
+ user-select: none;
3455
+ pointer-events: none;
3456
+ }
3457
+ .dags-page-size-label {
3458
+ display: inline-flex;
3459
+ align-items: center;
3460
+ gap: 0.35rem;
3461
+ font-size: 13px;
3462
+ color: var(--body, #5a5852);
3463
+ }
3464
+ .dags-page-size-label select {
3465
+ box-sizing: border-box;
3466
+ height: 36px;
3467
+ min-width: 4.5rem;
3468
+ padding: 0 0.5rem;
3469
+ border: 1px solid var(--hairline, #e6e5e0);
3470
+ border-radius: var(--radius-md, 8px);
3471
+ background: var(--surface, #ffffff);
3472
+ color: var(--ink, #26251e);
3473
+ font: inherit;
3474
+ font-size: 13px;
3475
+ line-height: 1;
3476
+ cursor: pointer;
3477
+ transition:
3478
+ border-color var(--transition-fast, 160ms ease),
3479
+ box-shadow var(--transition-fast, 160ms ease),
3480
+ background var(--transition-fast, 160ms ease);
3481
+ }
3482
+ .dags-page-size-label .custom-select {
3483
+ min-width: 4.5rem;
3484
+ }
3485
+ .dags-page-size-label .custom-select-trigger {
3486
+ box-sizing: border-box;
3487
+ height: 36px;
3488
+ min-width: 4.5rem;
3489
+ border: 1px solid var(--hairline, #e6e5e0);
3490
+ border-radius: 10px;
3491
+ background: var(--surface, #ffffff);
3492
+ color: var(--ink, #26251e);
3493
+ font: inherit;
3494
+ font-size: 13px;
3495
+ line-height: 1;
3496
+ cursor: pointer;
3497
+ }
3498
+ .dags-refresh-btn {
3499
+ box-sizing: border-box;
3500
+ display: inline-flex;
3501
+ align-items: center;
3502
+ justify-content: center;
3503
+ width: 36px;
3504
+ height: 36px;
3505
+ min-width: 36px;
3506
+ min-height: 36px;
3507
+ padding: 0;
3508
+ margin: 0;
3509
+ border: 1px solid var(--hairline, #e6e5e0);
3510
+ border-radius: var(--radius-md, 8px);
3511
+ background: var(--surface, #ffffff);
3512
+ color: var(--ink, #26251e);
3513
+ font: inherit;
3514
+ line-height: 1;
3515
+ cursor: pointer;
3516
+ appearance: none;
3517
+ -webkit-appearance: none;
3518
+ transition:
3519
+ background var(--transition-fast, 160ms ease),
3520
+ border-color var(--transition-fast, 160ms ease),
3521
+ color var(--transition-fast, 160ms ease),
3522
+ box-shadow var(--transition-fast, 160ms ease),
3523
+ opacity var(--transition-fast, 160ms ease);
3524
+ }
3525
+ .dags-refresh-btn:hover:not(:disabled) {
3526
+ border-color: var(--hairline-strong, #cfcdc4);
3527
+ background: var(--surface-muted, #f0efe9);
3528
+ }
3529
+ .dags-refresh-btn:active:not(:disabled) {
3530
+ background: color-mix(in srgb, var(--surface-muted, #f0efe9) 80%, var(--hairline, #e6e5e0));
3531
+ }
3532
+ .dags-pagination.is-busy {
3533
+ opacity: 0.92;
3534
+ }
3535
+ .dags-degraded-banner:not([hidden]) {
3536
+ border: 1px solid color-mix(in srgb, #c45c26 35%, var(--hairline, #e2dcd4));
3537
+ background: color-mix(in srgb, #c45c26 8%, var(--surface, #fff));
3538
+ color: var(--ink, #1c1917);
3539
+ padding: var(--space-3, 0.75rem) var(--space-4, 1rem);
3540
+ margin-bottom: var(--space-3, 0.75rem);
3541
+ }
3542
+ .dags-history-row.clickable {
3543
+ cursor: pointer;
3544
+ }
3545
+ @media (max-width: 720px) {
3546
+ .dags-pagination {
3547
+ display: flex;
3548
+ flex-wrap: wrap;
3549
+ align-items: center;
3550
+ justify-content: space-between;
3551
+ }
3552
+ .dags-pagination-summary {
3553
+ flex: 1 1 auto;
3554
+ justify-self: auto;
3555
+ }
3556
+ .dags-pagination-tools {
3557
+ flex: 0 0 auto;
3558
+ margin-left: auto;
3559
+ justify-self: auto;
3560
+ }
3561
+ .dags-pagination-pages {
3562
+ order: 3;
3563
+ flex: 0 0 auto;
3564
+ flex-wrap: nowrap;
3565
+ width: max-content;
3566
+ max-width: 100%;
3567
+ margin-inline: auto;
3568
+ justify-content: center;
3569
+ justify-self: auto;
3570
+ gap: 1px;
3571
+ padding: 3px;
3572
+ }
3573
+ .dags-page-num,
3574
+ .dags-page-nav {
3575
+ width: 28px;
3576
+ height: 28px;
3577
+ min-width: 28px;
3578
+ min-height: 28px;
3579
+ border-radius: 8px;
3580
+ font-size: 12px;
3581
+ }
3582
+ .dags-page-num i,
3583
+ .dags-page-nav i {
3584
+ font-size: 15px;
3585
+ }
3586
+ .dags-page-ellipsis {
3587
+ width: 16px;
3588
+ min-width: 16px;
3589
+ height: 28px;
3590
+ }
3591
+ }
3592
+ @media (prefers-reduced-motion: reduce) {
3593
+ .dags-copy-btn,
3594
+ .dags-page-num,
3595
+ .dags-page-nav,
3596
+ .dags-refresh-btn,
3597
+ .dags-page-size-label select,
3598
+ .dags-page-size-label .custom-select-trigger,
3599
+ .dags-copy-toast,
3600
+ .custom-select-trigger,
3601
+ .custom-select-chevron,
3602
+ .custom-select-menu {
3603
+ transition: none !important;
3604
+ transform: none !important;
3605
+ animation: none !important;
3606
+ }
3607
+ .custom-select.is-open .custom-select-chevron {
3608
+ transform: none !important;
3609
+ }
3610
+ }
3611
+
3612
+ /* Shared custom select (DAG history pageSize + inspector attempt). */
3613
+ .custom-select {
3614
+ position: relative;
3615
+ display: inline-flex;
3616
+ vertical-align: middle;
3617
+ min-width: 4.5rem;
3618
+ }
3619
+ .custom-select-trigger {
3620
+ box-sizing: border-box;
3621
+ display: inline-flex;
3622
+ align-items: center;
3623
+ justify-content: space-between;
3624
+ gap: 0.35rem;
3625
+ width: 100%;
3626
+ height: 36px;
3627
+ min-height: 36px;
3628
+ padding: 0 0.55rem 0 0.65rem;
3629
+ margin: 0;
3630
+ border: 1px solid var(--hairline, #e6e5e0);
3631
+ border-radius: 10px;
3632
+ background: var(--surface, #ffffff);
3633
+ color: var(--ink, #26251e);
3634
+ font: inherit;
3635
+ font-size: 13px;
3636
+ line-height: 1;
3637
+ cursor: pointer;
3638
+ appearance: none;
3639
+ -webkit-appearance: none;
3640
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--ink, #26251e) 4%, transparent);
3641
+ transition:
3642
+ border-color var(--transition-fast, 160ms ease),
3643
+ box-shadow var(--transition-fast, 160ms ease),
3644
+ background var(--transition-fast, 160ms ease);
3645
+ }
3646
+ .custom-select-trigger:hover:not(:disabled) {
3647
+ background: var(--surface-muted, #f0efe9);
3648
+ border-color: var(--hairline-strong, #cfcdc4);
3649
+ }
3650
+ .custom-select-trigger:focus-visible {
3651
+ outline: 2px solid color-mix(in srgb, var(--orange, #f54e00) 55%, transparent);
3652
+ outline-offset: 1px;
3653
+ }
3654
+ .custom-select-trigger:disabled {
3655
+ opacity: 0.45;
3656
+ cursor: not-allowed;
3657
+ }
3658
+ .custom-select-value {
3659
+ flex: 1 1 auto;
3660
+ min-width: 0;
3661
+ text-align: left;
3662
+ overflow: hidden;
3663
+ text-overflow: ellipsis;
3664
+ white-space: nowrap;
3665
+ }
3666
+ .custom-select-chevron {
3667
+ flex: 0 0 auto;
3668
+ font-size: 16px;
3669
+ line-height: 1;
3670
+ color: var(--muted, #807d72);
3671
+ transition: transform var(--transition-fast, 160ms ease);
3672
+ pointer-events: none;
3673
+ }
3674
+ .custom-select.is-open .custom-select-chevron {
3675
+ transform: rotate(180deg);
3676
+ }
3677
+ .custom-select-menu {
3678
+ box-sizing: border-box;
3679
+ position: absolute;
3680
+ z-index: 40;
3681
+ display: flex;
3682
+ flex-direction: column;
3683
+ min-width: 100%;
3684
+ max-height: calc(6 * 38px + 8px);
3685
+ padding: 4px;
3686
+ overflow-x: hidden;
3687
+ overflow-y: auto;
3688
+ border: 1px solid var(--hairline, #e6e5e0);
3689
+ border-radius: 12px;
3690
+ background: color-mix(in srgb, var(--surface, #ffffff) 96%, transparent);
3691
+ backdrop-filter: blur(8px);
3692
+ box-shadow:
3693
+ 0 4px 16px color-mix(in srgb, var(--ink, #26251e) 10%, transparent),
3694
+ 0 1px 3px color-mix(in srgb, var(--ink, #26251e) 6%, transparent);
3695
+ }
3696
+ .custom-select-menu[hidden] {
3697
+ display: none !important;
3698
+ }
3699
+ .custom-select-option {
3700
+ box-sizing: border-box;
3701
+ display: flex;
3702
+ align-items: center;
3703
+ justify-content: space-between;
3704
+ gap: 0.5rem;
3705
+ min-height: 38px;
3706
+ height: 38px;
3707
+ padding: 0 0.65rem;
3708
+ border-radius: 8px;
3709
+ color: var(--ink, #26251e);
3710
+ font-size: 13px;
3711
+ line-height: 1.2;
3712
+ cursor: pointer;
3713
+ user-select: none;
3714
+ }
3715
+ .custom-select-option:hover,
3716
+ .custom-select-option.is-active {
3717
+ background: var(--surface-muted, #f0efe9);
3718
+ }
3719
+ .custom-select-option.is-selected {
3720
+ background: var(--orange-soft, #fff1ea);
3721
+ color: var(--orange-active, #d04200);
3722
+ font-weight: 600;
3723
+ }
3724
+ .custom-select-option.is-selected.is-active,
3725
+ .custom-select-option.is-selected:hover {
3726
+ background: color-mix(in srgb, var(--orange-soft, #fff1ea) 70%, var(--surface-muted, #f0efe9));
3727
+ }
3728
+ .custom-select-option-label {
3729
+ flex: 1 1 auto;
3730
+ min-width: 0;
3731
+ overflow: hidden;
3732
+ text-overflow: ellipsis;
3733
+ white-space: nowrap;
3734
+ }
3735
+ .custom-select-option-check {
3736
+ flex: 0 0 auto;
3737
+ font-size: 15px;
3738
+ line-height: 1;
3739
+ opacity: 0;
3740
+ color: var(--orange-active, #d04200);
3741
+ }
3742
+ .custom-select-option.is-selected .custom-select-option-check {
3743
+ opacity: 1;
3744
+ }