@tea-agent/loop-agent 0.32.0 → 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 (56) hide show
  1. package/CHANGELOG.md +60 -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/app/console-types.js +140 -0
  14. package/dist/worker/console/static-src/app/useConsoleShell.js +101 -0
  15. package/dist/worker/console/static-src/app/useOperatorActions.js +304 -0
  16. package/dist/worker/console/static-src/app/usePrdImport.js +171 -0
  17. package/dist/worker/console/static-src/app/useRecoveryActions.js +257 -0
  18. package/dist/worker/console/static-src/app/useRecoveryConsole.js +334 -0
  19. package/dist/worker/console/static-src/app/useTaskWizard.js +229 -0
  20. package/dist/worker/console/static-src/chat-view-types.js +2 -0
  21. package/dist/worker/console/static-src/night/night-types.js +24 -0
  22. package/dist/worker/console/static-src/night/useNightBoard.js +94 -0
  23. package/dist/worker/console/static-src/night/useNightWizard.js +171 -0
  24. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +253 -0
  25. package/dist/worker/console/static-src/operator-chat/format.js +71 -0
  26. package/dist/worker/console/static-src/operator-chat/refs.js +47 -0
  27. package/dist/worker/console/static-src/operator-chat/tools-catalog.js +77 -0
  28. package/dist/worker/console/static-src/operator-chat/types.js +1 -0
  29. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +320 -0
  30. package/dist/worker/console/static-src/operator-chat/useChatStream.js +209 -0
  31. package/dist/worker/console/static-src/operator-chat/useChatThread.js +218 -0
  32. package/dist/worker/console/static-src/operator-chat/useComposer.js +125 -0
  33. package/dist/worker/console/static-src/operator-chat/useInterview.js +108 -0
  34. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +123 -0
  35. package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +207 -0
  36. package/dist/worker/observability/read-model.js +106 -0
  37. package/dist/worker/observe/routes.js +19 -1
  38. package/dist/worker/observe/static/api.js +42 -3
  39. package/dist/worker/observe/static/app.js +4 -0
  40. package/dist/worker/observe/static/constants.js +10 -0
  41. package/dist/worker/observe/static/custom-select.js +567 -0
  42. package/dist/worker/observe/static/index.html +47 -6
  43. package/dist/worker/observe/static/router.js +54 -1
  44. package/dist/worker/observe/static/state.js +20 -0
  45. package/dist/worker/observe/static/styles.css +618 -30
  46. package/dist/worker/observe/static/views/dag-inspector.js +20 -17
  47. package/dist/worker/observe/static/views/dag.js +136 -59
  48. package/dist/worker/observe/static/views/dags.js +877 -0
  49. package/dist/worker/observe/static/views/dashboard.js +15 -4
  50. package/dist/workflows/dag/init-hybrid.js +58 -29
  51. package/docs/templates/agent-worker-production-readiness-checklist.md +26 -24
  52. package/docs/templates/harness.schema.json +5 -0
  53. package/harness.json +4 -4
  54. package/package.json +5 -4
  55. package/dist/worker/console/static/assets/index-D9gnJn_l.js +0 -29
  56. package/dist/worker/console/static/assets/index-rajoXwkM.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
+ }