@profoundlogic/coderflow-server 0.2.1 → 0.2.4

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 (147) hide show
  1. package/dist/base-image/Dockerfile +3 -0
  2. package/dist/base-image/agent-wrapper.sh +31 -9
  3. package/dist/coder-server.js +1 -1
  4. package/dist/config/cli-models.json +11 -3
  5. package/dist/config.js +1 -1
  6. package/dist/lib/agent-keepalive.js +1 -1
  7. package/dist/lib/api-keys.js +1 -1
  8. package/dist/lib/apiKeys.js +1 -1
  9. package/dist/lib/app-server-ports.js +1 -0
  10. package/dist/lib/auto-judge.js +1 -1
  11. package/dist/lib/basic-auth.js +1 -1
  12. package/dist/lib/build-history.js +1 -1
  13. package/dist/lib/build-output-service.js +1 -1
  14. package/dist/lib/build-scheduler.js +1 -1
  15. package/dist/lib/build-service.js +1 -1
  16. package/dist/lib/ca-certificates.js +1 -0
  17. package/dist/lib/claude-oauth-refresh.js +1 -1
  18. package/dist/lib/cli/build.js +1 -1
  19. package/dist/lib/cli/config-command.js +1 -1
  20. package/dist/lib/cli/config.js +1 -1
  21. package/dist/lib/cli/create-user.js +1 -1
  22. package/dist/lib/cli/init.js +1 -1
  23. package/dist/lib/cli/jira.js +1 -1
  24. package/dist/lib/cli/license.js +1 -1
  25. package/dist/lib/cli/server-manager.js +1 -1
  26. package/dist/lib/container-tokens.js +1 -1
  27. package/dist/lib/data-dir.js +1 -1
  28. package/dist/lib/deployment-history.js +1 -1
  29. package/dist/lib/deployment-service.js +1 -1
  30. package/dist/lib/docker-utils.js +1 -1
  31. package/dist/lib/email.js +1 -1
  32. package/dist/lib/emailTemplates.js +1 -1
  33. package/dist/lib/entitlement.js +1 -1
  34. package/dist/lib/fetch-utils.js +1 -1
  35. package/dist/lib/git-provider-service.js +1 -1
  36. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  37. package/dist/lib/git-provider-setup/index.js +1 -1
  38. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  39. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  40. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  41. package/dist/lib/git-providers/github-app-provider.js +1 -1
  42. package/dist/lib/git-providers/index.js +1 -1
  43. package/dist/lib/git-providers/provider-factory.js +1 -1
  44. package/dist/lib/git-providers/provider-interface.js +1 -1
  45. package/dist/lib/github-urls.js +1 -0
  46. package/dist/lib/jira-client.js +1 -1
  47. package/dist/lib/logger.js +1 -1
  48. package/dist/lib/model-fetcher.js +1 -1
  49. package/dist/lib/notifications.js +1 -1
  50. package/dist/lib/oidc-auth.js +1 -1
  51. package/dist/lib/oidc-device-flow.js +1 -1
  52. package/dist/lib/passwordTokens.js +1 -1
  53. package/dist/lib/pin-cascade.js +1 -1
  54. package/dist/lib/provider-accounts.js +1 -1
  55. package/dist/lib/provider-oauth.js +1 -1
  56. package/dist/lib/provider-profile.js +1 -1
  57. package/dist/lib/provider-token-refresh.js +1 -1
  58. package/dist/lib/request-url.js +1 -0
  59. package/dist/lib/rewind.js +1 -0
  60. package/dist/lib/roles.js +1 -1
  61. package/dist/lib/secrets.js +1 -1
  62. package/dist/lib/setup-repo-git-auth.js +1 -0
  63. package/dist/lib/state-capture.js +1 -1
  64. package/dist/lib/static-files.js +1 -1
  65. package/dist/lib/task-name-generator.js +1 -1
  66. package/dist/lib/user-git-oauth.js +1 -0
  67. package/dist/lib/user-git-tokens.js +1 -0
  68. package/dist/lib/users.js +1 -1
  69. package/dist/middleware/requireAuth.js +1 -1
  70. package/dist/middleware/requireInit.js +1 -1
  71. package/dist/middleware/requirePermission.js +1 -1
  72. package/dist/package.json +1 -1
  73. package/dist/routes/apiKeys.js +1 -1
  74. package/dist/routes/auth-oidc.js +1 -1
  75. package/dist/routes/auth.js +1 -1
  76. package/dist/routes/build.js +1 -1
  77. package/dist/routes/containers.js +1 -1
  78. package/dist/routes/deploy-task.js +1 -1
  79. package/dist/routes/environment-management.js +1 -1
  80. package/dist/routes/environments.js +1 -1
  81. package/dist/routes/external-skills.js +1 -1
  82. package/dist/routes/git-credentials.js +1 -1
  83. package/dist/routes/git-oauth.js +1 -0
  84. package/dist/routes/git-provider-setup.js +1 -1
  85. package/dist/routes/health.js +1 -1
  86. package/dist/routes/jira.js +1 -1
  87. package/dist/routes/objective-management.js +1 -1
  88. package/dist/routes/password.js +1 -1
  89. package/dist/routes/prompt.js +1 -1
  90. package/dist/routes/provider-auth.js +1 -1
  91. package/dist/routes/qa.js +1 -1
  92. package/dist/routes/settings.js +1 -1
  93. package/dist/routes/skill-management.js +1 -1
  94. package/dist/routes/skills.js +1 -1
  95. package/dist/routes/tasks.js +1 -1
  96. package/dist/routes/templates.js +1 -1
  97. package/dist/routes/test-task.js +1 -1
  98. package/dist/routes/test.js +1 -1
  99. package/dist/routes/users.js +1 -1
  100. package/dist/routes/visualizations.js +1 -1
  101. package/dist/scripts/create-user.js +1 -1
  102. package/dist/start.js +1 -1
  103. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  104. package/dist/web-ui/public/activity-feed.js +1 -1
  105. package/dist/web-ui/public/activity-formatters.js +1 -1
  106. package/dist/web-ui/public/agent-event-parser.js +1 -1
  107. package/dist/web-ui/public/app.js +1 -1
  108. package/dist/web-ui/public/approve-dialog.js +1 -1
  109. package/dist/web-ui/public/comments-widget.js +1 -1
  110. package/dist/web-ui/public/diff-utils.js +1 -0
  111. package/dist/web-ui/public/docs/_sidebar.md +1 -0
  112. package/dist/web-ui/public/docs/admin/ca-certificates.md +33 -0
  113. package/dist/web-ui/public/docs/admin/environments.md +3 -0
  114. package/dist/web-ui/public/docs/admin/git-providers.md +49 -1
  115. package/dist/web-ui/public/environments.css +173 -3
  116. package/dist/web-ui/public/environments.html +30 -9
  117. package/dist/web-ui/public/environments.js +1 -1
  118. package/dist/web-ui/public/feedback-widget.css +7 -0
  119. package/dist/web-ui/public/feedback-widget.js +1 -1
  120. package/dist/web-ui/public/git-history.html +1 -1
  121. package/dist/web-ui/public/git-history.js +1 -1
  122. package/dist/web-ui/public/git-status.js +1 -1
  123. package/dist/web-ui/public/index.html +100 -2
  124. package/dist/web-ui/public/index.js +1 -1
  125. package/dist/web-ui/public/login.js +1 -1
  126. package/dist/web-ui/public/markdown-editor.js +1 -1
  127. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  128. package/dist/web-ui/public/modal-maximize.js +1 -1
  129. package/dist/web-ui/public/notifications.js +1 -1
  130. package/dist/web-ui/public/server-health.js +1 -1
  131. package/dist/web-ui/public/settings.css +264 -7
  132. package/dist/web-ui/public/settings.html +213 -8
  133. package/dist/web-ui/public/settings.js +1 -1
  134. package/dist/web-ui/public/setup-password.js +1 -1
  135. package/dist/web-ui/public/skills.css +23 -0
  136. package/dist/web-ui/public/skills.html +3 -2
  137. package/dist/web-ui/public/skills.js +1 -1
  138. package/dist/web-ui/public/sse-client.js +1 -1
  139. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  140. package/dist/web-ui/public/styles.css +722 -7
  141. package/dist/web-ui/public/task.html +7 -0
  142. package/dist/web-ui/public/task.js +1 -1
  143. package/dist/web-ui/public/terminal.js +1 -1
  144. package/dist/web-ui/public/theme.js +1 -1
  145. package/dist/web-ui/public/users.js +1 -1
  146. package/dist/web-ui/public/variant-grouping.js +1 -1
  147. package/package.json +1 -1
@@ -2683,6 +2683,26 @@ button:disabled,
2683
2683
  background: var(--color-text-muted);
2684
2684
  }
2685
2685
 
2686
+ .btn-primary.btn-approved:disabled {
2687
+ background: transparent;
2688
+ color: var(--color-success);
2689
+ border: none;
2690
+ font-weight: 600;
2691
+ box-shadow: none;
2692
+ opacity: 1;
2693
+ cursor: default;
2694
+ pointer-events: auto;
2695
+ }
2696
+
2697
+ .btn-primary.btn-approved:disabled:hover {
2698
+ transform: none;
2699
+ background: transparent;
2700
+ }
2701
+
2702
+ .btn-primary.btn-approved:disabled svg {
2703
+ color: #1e8a55;
2704
+ }
2705
+
2686
2706
  .btn-secondary:disabled {
2687
2707
  background: rgba(31, 42, 68, 0.06);
2688
2708
  color: var(--color-text-muted);
@@ -2735,6 +2755,17 @@ button:disabled,
2735
2755
  background: rgba(63, 114, 255, 0.16);
2736
2756
  }
2737
2757
 
2758
+ .dropdown-item:disabled {
2759
+ opacity: 0.5;
2760
+ cursor: not-allowed;
2761
+ color: var(--color-text-secondary);
2762
+ }
2763
+
2764
+ .dropdown-item:disabled:hover {
2765
+ background: none;
2766
+ color: var(--color-text-secondary);
2767
+ }
2768
+
2738
2769
  .btn-ghost:disabled {
2739
2770
  color: rgba(31, 42, 68, 0.3);
2740
2771
  }
@@ -3182,6 +3213,7 @@ button:disabled,
3182
3213
  background: #fdfcfb; /* Very subtle warm cream to feel inviting */
3183
3214
  border-radius: var(--radius-medium);
3184
3215
  border: 1px solid rgba(31,42,68,0.08);
3216
+ border-left: 3px solid rgba(31,42,68,0.15);
3185
3217
  color: inherit;
3186
3218
  text-decoration: none;
3187
3219
  transition: box-shadow 0.18s ease, background-color 0.18s ease, border-color 0.18s ease;
@@ -3194,61 +3226,76 @@ button:disabled,
3194
3226
  transform: none;
3195
3227
  box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12);
3196
3228
  background: var(--color-surface); /* Brighten to pure white on hover */
3197
- border-color: rgba(63,114,255,0.14);
3229
+ border-top-color: rgba(63,114,255,0.14);
3230
+ border-right-color: rgba(63,114,255,0.14);
3231
+ border-bottom-color: rgba(63,114,255,0.14);
3198
3232
  outline: none;
3199
3233
  }
3200
3234
 
3201
3235
  /* Very subtle status-based background tints layered on the warm base */
3202
3236
  .task-tile.status-running {
3203
3237
  background: linear-gradient(135deg, rgba(244, 183, 64, 0.09) 0%, #fdfcfb 100%);
3238
+ border-left-color: var(--color-warning);
3204
3239
  }
3205
3240
 
3206
3241
  .task-tile.status-failed {
3207
3242
  background: linear-gradient(135deg, rgba(229, 83, 104, 0.07) 0%, #fdfcfb 100%);
3243
+ border-left-color: var(--color-danger);
3208
3244
  }
3209
3245
 
3210
3246
  .task-tile.status-completed {
3211
3247
  background: #fdfcfb; /* Keep the warm cream base */
3248
+ border-left-color: var(--color-success);
3212
3249
  }
3213
3250
 
3214
3251
  .task-tile.status-staged {
3215
3252
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.09) 0%, #fdfcfb 100%);
3253
+ border-left-color: #8b5cf6;
3216
3254
  }
3217
3255
 
3218
3256
  .task-tile.status-queued {
3219
3257
  background: linear-gradient(135deg, rgba(59, 130, 246, 0.09) 0%, #fdfcfb 100%);
3258
+ border-left-color: #3b82f6;
3220
3259
  }
3221
3260
 
3222
3261
  :root[data-theme="dark"] .task-tile {
3223
3262
  background: var(--color-surface-muted);
3224
3263
  border-color: rgba(148, 163, 184, 0.2);
3264
+ border-left-color: rgba(148, 163, 184, 0.35);
3225
3265
  box-shadow: var(--shadow-soft);
3226
3266
  }
3227
3267
 
3228
3268
  :root[data-theme="dark"] .task-tile:hover,
3229
3269
  :root[data-theme="dark"] .task-tile:focus-visible {
3230
3270
  background: var(--color-surface);
3231
- border-color: rgba(63,114,255,0.35);
3271
+ border-top-color: rgba(63,114,255,0.35);
3272
+ border-right-color: rgba(63,114,255,0.35);
3273
+ border-bottom-color: rgba(63,114,255,0.35);
3232
3274
  }
3233
3275
 
3234
3276
  :root[data-theme="dark"] .task-tile.status-running {
3235
3277
  background: linear-gradient(135deg, rgba(244, 183, 64, 0.12) 0%, var(--color-surface-muted) 100%);
3278
+ border-left-color: var(--color-warning);
3236
3279
  }
3237
3280
 
3238
3281
  :root[data-theme="dark"] .task-tile.status-failed {
3239
3282
  background: linear-gradient(135deg, rgba(229, 83, 104, 0.12) 0%, var(--color-surface-muted) 100%);
3283
+ border-left-color: var(--color-danger);
3240
3284
  }
3241
3285
 
3242
3286
  :root[data-theme="dark"] .task-tile.status-completed {
3243
3287
  background: var(--color-surface-muted);
3288
+ border-left-color: var(--color-success);
3244
3289
  }
3245
3290
 
3246
3291
  :root[data-theme="dark"] .task-tile.status-staged {
3247
3292
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.14) 0%, var(--color-surface-muted) 100%);
3293
+ border-left-color: #8b5cf6;
3248
3294
  }
3249
3295
 
3250
3296
  :root[data-theme="dark"] .task-tile.status-queued {
3251
3297
  background: linear-gradient(135deg, rgba(59, 130, 246, 0.14) 0%, var(--color-surface-muted) 100%);
3298
+ border-left-color: #3b82f6;
3252
3299
  }
3253
3300
 
3254
3301
  .task-tile .task-title {
@@ -3286,13 +3333,61 @@ button:disabled,
3286
3333
  }
3287
3334
 
3288
3335
  .task-title .task-time {
3289
- margin-left: auto;
3290
3336
  font-size: 12px;
3291
3337
  color: var(--color-text-muted);
3292
3338
  white-space: nowrap;
3293
3339
  flex-shrink: 0;
3294
3340
  }
3295
3341
 
3342
+ /* Inline status label pill for at-a-glance task status */
3343
+ .task-status-label {
3344
+ margin-left: auto;
3345
+ display: inline-flex;
3346
+ align-items: center;
3347
+ font-size: 11px;
3348
+ font-weight: 600;
3349
+ padding: 2px 8px;
3350
+ border-radius: 10px;
3351
+ white-space: nowrap;
3352
+ flex-shrink: 0;
3353
+ letter-spacing: 0.02em;
3354
+ text-transform: uppercase;
3355
+ }
3356
+ .task-status-label.status-running {
3357
+ background: rgba(244, 183, 64, 0.15);
3358
+ color: #b8860b;
3359
+ animation: pulse-running 2s ease-in-out infinite;
3360
+ }
3361
+ .task-status-label.status-failed {
3362
+ background: rgba(229, 83, 104, 0.14);
3363
+ color: var(--color-danger);
3364
+ }
3365
+ .task-status-label.status-staged {
3366
+ background: rgba(139, 92, 246, 0.12);
3367
+ color: #8b5cf6;
3368
+ }
3369
+ .task-status-label.status-queued {
3370
+ background: rgba(59, 130, 246, 0.12);
3371
+ color: #3b82f6;
3372
+ }
3373
+
3374
+ :root[data-theme="dark"] .task-status-label.status-running {
3375
+ background: rgba(244, 183, 64, 0.18);
3376
+ color: #f4b740;
3377
+ }
3378
+ :root[data-theme="dark"] .task-status-label.status-failed {
3379
+ background: rgba(229, 83, 104, 0.18);
3380
+ color: #f87171;
3381
+ }
3382
+ :root[data-theme="dark"] .task-status-label.status-staged {
3383
+ background: rgba(139, 92, 246, 0.18);
3384
+ color: #a78bfa;
3385
+ }
3386
+ :root[data-theme="dark"] .task-status-label.status-queued {
3387
+ background: rgba(59, 130, 246, 0.18);
3388
+ color: #60a5fa;
3389
+ }
3390
+
3296
3391
  .task-tile .task-meta {
3297
3392
  font-size: 13px;
3298
3393
  color: var(--color-text-muted);
@@ -5638,6 +5733,82 @@ select option[value=""] {
5638
5733
  font-size: 16px;
5639
5734
  }
5640
5735
 
5736
+ /* Model Configuration section in options menu */
5737
+ .options-menu-section {
5738
+ padding: 4px 0;
5739
+ }
5740
+
5741
+ .options-menu-label {
5742
+ padding: 6px 16px 4px;
5743
+ font-size: 11px;
5744
+ font-weight: 600;
5745
+ text-transform: uppercase;
5746
+ letter-spacing: 0.5px;
5747
+ color: var(--color-text-muted);
5748
+ }
5749
+
5750
+ .options-menu-select-row {
5751
+ display: flex;
5752
+ align-items: center;
5753
+ justify-content: space-between;
5754
+ gap: 12px;
5755
+ padding: 6px 16px;
5756
+ }
5757
+
5758
+ .options-menu-select-row label {
5759
+ font-size: 13px;
5760
+ color: var(--color-text-secondary);
5761
+ white-space: nowrap;
5762
+ }
5763
+
5764
+ .options-menu-select-row select {
5765
+ flex: 0 1 auto;
5766
+ min-width: 130px;
5767
+ padding: 4px 8px;
5768
+ font-size: 12px;
5769
+ border: 1px solid var(--color-border);
5770
+ border-radius: var(--radius-small);
5771
+ background: var(--color-bg);
5772
+ color: var(--color-text);
5773
+ cursor: pointer;
5774
+ }
5775
+
5776
+ .options-menu-select-row select:focus {
5777
+ outline: none;
5778
+ border-color: var(--color-accent);
5779
+ }
5780
+
5781
+ .options-menu-actions-row {
5782
+ display: flex;
5783
+ justify-content: flex-end;
5784
+ padding: 4px 16px 8px;
5785
+ }
5786
+
5787
+ .options-menu-link-btn {
5788
+ background: none;
5789
+ border: none;
5790
+ padding: 0;
5791
+ color: var(--color-text-muted);
5792
+ font-size: 12px;
5793
+ cursor: pointer;
5794
+ text-decoration: underline;
5795
+ }
5796
+
5797
+ .options-menu-link-btn:hover {
5798
+ color: var(--color-text);
5799
+ }
5800
+
5801
+ .options-menu-link-btn:focus {
5802
+ outline: none;
5803
+ color: var(--color-text);
5804
+ }
5805
+
5806
+ .options-menu-link-btn:disabled {
5807
+ opacity: 0.45;
5808
+ cursor: default;
5809
+ text-decoration: none;
5810
+ }
5811
+
5641
5812
  .options-menu-item .option-text {
5642
5813
  flex: 1;
5643
5814
  white-space: nowrap;
@@ -8097,6 +8268,10 @@ select option[value=""] {
8097
8268
  animation: pulse-indicator 1s ease-in-out infinite;
8098
8269
  }
8099
8270
 
8271
+ .status-indicator.degraded {
8272
+ background: var(--color-warning);
8273
+ }
8274
+
8100
8275
  @keyframes pulse-indicator {
8101
8276
  0%, 100% {
8102
8277
  opacity: 1;
@@ -12050,6 +12225,183 @@ select option[value=""] {
12050
12225
  display: none;
12051
12226
  }
12052
12227
 
12228
+ .profile-section-desc {
12229
+ font-size: 13px;
12230
+ color: var(--color-text-muted);
12231
+ margin-bottom: 12px;
12232
+ }
12233
+
12234
+ /* Git Connections Section */
12235
+ .git-connections-list {
12236
+ display: flex;
12237
+ flex-direction: column;
12238
+ gap: 8px;
12239
+ }
12240
+
12241
+ .git-connections-loading {
12242
+ font-size: 13px;
12243
+ color: var(--color-text-muted);
12244
+ padding: 8px 0;
12245
+ }
12246
+
12247
+ .git-connection-item {
12248
+ display: flex;
12249
+ align-items: center;
12250
+ justify-content: space-between;
12251
+ padding: 10px 12px;
12252
+ background: var(--color-bg-secondary);
12253
+ border-radius: 8px;
12254
+ border: 1px solid var(--color-border);
12255
+ }
12256
+
12257
+ .git-connection-info {
12258
+ display: flex;
12259
+ align-items: center;
12260
+ gap: 10px;
12261
+ }
12262
+
12263
+ .git-connection-icon {
12264
+ width: 24px;
12265
+ height: 24px;
12266
+ color: var(--color-text-muted);
12267
+ }
12268
+
12269
+ .git-connection-details {
12270
+ display: flex;
12271
+ flex-direction: column;
12272
+ gap: 2px;
12273
+ }
12274
+
12275
+ .git-connection-name {
12276
+ font-size: 14px;
12277
+ font-weight: 500;
12278
+ color: var(--color-text);
12279
+ }
12280
+
12281
+ .git-connection-display-name {
12282
+ font-size: 12px;
12283
+ color: var(--color-text-muted);
12284
+ }
12285
+
12286
+ .git-connection-status {
12287
+ font-size: 12px;
12288
+ color: var(--color-text-muted);
12289
+ }
12290
+
12291
+ .git-connection-status.connected {
12292
+ color: var(--color-success);
12293
+ }
12294
+
12295
+ .git-connection-actions .btn-small {
12296
+ padding: 4px 10px;
12297
+ font-size: 12px;
12298
+ }
12299
+
12300
+ .git-connections-empty {
12301
+ font-size: 13px;
12302
+ color: var(--color-text-muted);
12303
+ padding: 12px 0;
12304
+ text-align: center;
12305
+ }
12306
+
12307
+ /* Git Connections Required Modal */
12308
+ .git-connections-intro {
12309
+ margin-bottom: 16px;
12310
+ color: var(--color-text);
12311
+ }
12312
+
12313
+ .git-connections-required-list {
12314
+ display: flex;
12315
+ flex-direction: column;
12316
+ gap: 12px;
12317
+ margin-bottom: 16px;
12318
+ }
12319
+
12320
+ .git-provider-card {
12321
+ padding: 16px;
12322
+ background: var(--color-bg-secondary);
12323
+ border-radius: 8px;
12324
+ border: 1px solid var(--color-border);
12325
+ }
12326
+
12327
+ .git-provider-card-header {
12328
+ display: flex;
12329
+ align-items: center;
12330
+ justify-content: space-between;
12331
+ margin-bottom: 8px;
12332
+ }
12333
+
12334
+ .git-provider-card-info {
12335
+ display: flex;
12336
+ align-items: center;
12337
+ gap: 10px;
12338
+ }
12339
+
12340
+ .git-provider-card-icon {
12341
+ width: 24px;
12342
+ height: 24px;
12343
+ color: var(--color-text-muted);
12344
+ }
12345
+
12346
+ .git-provider-card-details {
12347
+ display: flex;
12348
+ flex-direction: column;
12349
+ gap: 2px;
12350
+ }
12351
+
12352
+ .git-provider-card-name {
12353
+ font-weight: 500;
12354
+ color: var(--color-text);
12355
+ }
12356
+
12357
+ .git-provider-card-display-name {
12358
+ font-size: 12px;
12359
+ color: var(--color-text-muted);
12360
+ }
12361
+
12362
+ .git-provider-card.connected {
12363
+ border-color: var(--color-success);
12364
+ background: color-mix(in srgb, var(--color-success) 5%, var(--color-bg-secondary));
12365
+ }
12366
+
12367
+ .git-provider-card-connected {
12368
+ font-size: 13px;
12369
+ font-weight: 500;
12370
+ color: var(--color-success);
12371
+ }
12372
+
12373
+ .git-provider-card.unsupported {
12374
+ border-color: var(--color-warning);
12375
+ background: color-mix(in srgb, var(--color-warning) 5%, var(--color-bg-secondary));
12376
+ }
12377
+
12378
+ .git-provider-card-unsupported {
12379
+ font-size: 12px;
12380
+ color: var(--color-warning);
12381
+ font-style: italic;
12382
+ }
12383
+
12384
+ .git-provider-card-repos {
12385
+ font-size: 13px;
12386
+ color: var(--color-text-muted);
12387
+ padding-left: 34px;
12388
+ }
12389
+
12390
+ .git-provider-card-repos ul {
12391
+ margin: 4px 0 0 0;
12392
+ padding-left: 16px;
12393
+ }
12394
+
12395
+ .git-provider-card-repos li {
12396
+ margin-bottom: 2px;
12397
+ }
12398
+
12399
+ .git-connections-hint {
12400
+ font-size: 13px;
12401
+ color: var(--color-text-muted);
12402
+ margin-top: 8px;
12403
+ }
12404
+
12053
12405
  .admin-dropdown {
12054
12406
  min-width: 220px;
12055
12407
  }
@@ -12356,6 +12708,32 @@ select option[value=""] {
12356
12708
  color: var(--color-text);
12357
12709
  }
12358
12710
 
12711
+ .metric-progress {
12712
+ width: 100%;
12713
+ height: 8px;
12714
+ border-radius: 999px;
12715
+ background: var(--color-surface);
12716
+ border: 1px solid var(--color-border);
12717
+ overflow: hidden;
12718
+ margin-top: 2px;
12719
+ }
12720
+
12721
+ .metric-progress-fill {
12722
+ width: 0;
12723
+ height: 100%;
12724
+ border-radius: inherit;
12725
+ transition: width 0.25s ease;
12726
+ background: var(--color-success);
12727
+ }
12728
+
12729
+ .metric-progress-fill.status-warning {
12730
+ background: var(--color-warning, #f59e0b);
12731
+ }
12732
+
12733
+ .metric-progress-fill.status-critical {
12734
+ background: var(--color-danger, #e55368);
12735
+ }
12736
+
12359
12737
  .metric-sub {
12360
12738
  font-size: 13px;
12361
12739
  color: var(--color-text-muted);
@@ -15551,6 +15929,58 @@ select option[value=""] {
15551
15929
  margin-bottom: 8px;
15552
15930
  }
15553
15931
 
15932
+ .objective-model-config-grid {
15933
+ display: flex;
15934
+ flex-direction: column;
15935
+ gap: 8px;
15936
+ }
15937
+
15938
+ .objective-model-config-row {
15939
+ display: flex;
15940
+ align-items: center;
15941
+ justify-content: space-between;
15942
+ gap: 12px;
15943
+ }
15944
+
15945
+ .objective-model-config-row label {
15946
+ font-size: 13px;
15947
+ color: var(--color-text-secondary);
15948
+ }
15949
+
15950
+ .objective-model-config-row select {
15951
+ min-width: 180px;
15952
+ max-width: 260px;
15953
+ width: 100%;
15954
+ padding: 7px 10px;
15955
+ border: 1px solid var(--color-border);
15956
+ border-radius: var(--radius-small);
15957
+ background: var(--color-surface);
15958
+ color: var(--color-text);
15959
+ font-size: 13px;
15960
+ }
15961
+
15962
+ .objective-model-config-row select:focus {
15963
+ outline: 2px solid rgba(63,114,255,0.25);
15964
+ border-color: var(--color-accent);
15965
+ }
15966
+
15967
+ .objective-model-config-actions {
15968
+ display: flex;
15969
+ justify-content: flex-end;
15970
+ }
15971
+
15972
+ @media (max-width: 700px) {
15973
+ .objective-model-config-row {
15974
+ flex-direction: column;
15975
+ align-items: stretch;
15976
+ }
15977
+
15978
+ .objective-model-config-row select {
15979
+ min-width: 0;
15980
+ max-width: none;
15981
+ }
15982
+ }
15983
+
15554
15984
  /* Objective Modal Actions */
15555
15985
  .objective-modal-actions {
15556
15986
  display: flex;
@@ -15649,6 +16079,7 @@ select option[value=""] {
15649
16079
  #objective-modal.instructions-maximized #objective-attachments-field,
15650
16080
  #objective-modal.instructions-maximized #objective-environment-field,
15651
16081
  #objective-modal.instructions-maximized #objective-agents-field,
16082
+ #objective-modal.instructions-maximized #objective-model-config-field,
15652
16083
  #objective-modal.instructions-maximized #objective-comments-field,
15653
16084
  #objective-modal.instructions-maximized .objective-modal-actions {
15654
16085
  display: none;
@@ -17020,7 +17451,7 @@ body.task-list-open .task-list-side-trigger {
17020
17451
  ============================================ */
17021
17452
 
17022
17453
  .modal-content-narrow {
17023
- max-width: 480px;
17454
+ max-width: 560px;
17024
17455
  }
17025
17456
 
17026
17457
  .modal-content-medium {
@@ -17050,14 +17481,13 @@ body.task-list-open .task-list-side-trigger {
17050
17481
 
17051
17482
  #about-coderflow-modal .about-version-card {
17052
17483
  display: flex;
17053
- justify-content: space-between;
17054
- align-items: center;
17484
+ flex-direction: column;
17055
17485
  padding: 10px 14px;
17056
17486
  background: var(--color-surface-muted);
17057
17487
  border: 1px solid var(--color-border);
17058
17488
  border-radius: var(--radius-small);
17059
17489
  text-align: left;
17060
- gap: 12px;
17490
+ gap: 8px;
17061
17491
  }
17062
17492
 
17063
17493
  #about-coderflow-modal .about-version-label {
@@ -17089,6 +17519,147 @@ body.task-list-open .task-list-side-trigger {
17089
17519
  text-decoration: underline;
17090
17520
  }
17091
17521
 
17522
+ /* About modal - Update check styles */
17523
+ .btn-sm {
17524
+ padding: 0.375rem 0.75rem;
17525
+ font-size: 0.875rem;
17526
+ }
17527
+
17528
+ #about-check-updates-btn:disabled {
17529
+ opacity: 0.6;
17530
+ cursor: not-allowed;
17531
+ }
17532
+
17533
+ .about-update-status {
17534
+ margin-top: 0.5rem;
17535
+ padding: 0.75rem;
17536
+ border-radius: 4px;
17537
+ font-size: 0.9rem;
17538
+ line-height: 1.4;
17539
+ }
17540
+
17541
+ .about-update-status.up-to-date {
17542
+ background-color: rgba(72, 187, 120, 0.1);
17543
+ border: 1px solid rgba(72, 187, 120, 0.3);
17544
+ color: #2f855a;
17545
+ }
17546
+
17547
+ .about-update-status.update-available {
17548
+ background-color: rgba(66, 153, 225, 0.1);
17549
+ border: 1px solid rgba(66, 153, 225, 0.3);
17550
+ color: #2c5282;
17551
+ }
17552
+
17553
+ .about-update-status.update-error {
17554
+ background-color: rgba(245, 101, 101, 0.1);
17555
+ border: 1px solid rgba(245, 101, 101, 0.3);
17556
+ color: #c53030;
17557
+ }
17558
+
17559
+ .about-update-status.update-ahead {
17560
+ background-color: rgba(237, 137, 54, 0.1);
17561
+ border: 1px solid rgba(237, 137, 54, 0.3);
17562
+ color: #9c4221;
17563
+ }
17564
+
17565
+ .about-update-header {
17566
+ display: flex;
17567
+ align-items: center;
17568
+ flex-wrap: wrap;
17569
+ gap: 0.25rem 0.5rem;
17570
+ }
17571
+
17572
+ .about-update-status-icon {
17573
+ display: inline-block;
17574
+ font-weight: bold;
17575
+ }
17576
+
17577
+ .about-update-link {
17578
+ display: inline-flex;
17579
+ align-items: center;
17580
+ margin-left: auto;
17581
+ color: #3182ce;
17582
+ text-decoration: none;
17583
+ font-weight: 500;
17584
+ }
17585
+
17586
+ .about-update-link:hover {
17587
+ text-decoration: underline;
17588
+ }
17589
+
17590
+ .about-update-version-row {
17591
+ margin-top: 0.5rem;
17592
+ display: flex;
17593
+ align-items: center;
17594
+ flex-wrap: wrap;
17595
+ gap: 0.35rem;
17596
+ }
17597
+
17598
+ .about-update-version-arrow {
17599
+ opacity: 0.8;
17600
+ }
17601
+
17602
+ .about-update-command-row {
17603
+ margin-top: 0.6rem;
17604
+ display: flex;
17605
+ align-items: center;
17606
+ gap: 0.5rem;
17607
+ flex-wrap: nowrap;
17608
+ }
17609
+
17610
+ .about-update-command {
17611
+ white-space: nowrap;
17612
+ flex: 1;
17613
+ overflow: hidden;
17614
+ text-overflow: ellipsis;
17615
+ }
17616
+
17617
+ .about-copy-command-btn {
17618
+ display: inline-flex;
17619
+ align-items: center;
17620
+ justify-content: center;
17621
+ flex-shrink: 0;
17622
+ width: 28px;
17623
+ height: 28px;
17624
+ padding: 0;
17625
+ border: 1px solid var(--color-border);
17626
+ border-radius: var(--radius-small);
17627
+ background: var(--color-surface);
17628
+ color: var(--color-text-muted);
17629
+ cursor: pointer;
17630
+ transition: background-color 0.15s, color 0.15s;
17631
+ }
17632
+
17633
+ .about-copy-command-btn:hover {
17634
+ background: var(--color-surface-muted);
17635
+ color: var(--color-text);
17636
+ }
17637
+
17638
+ .about-copy-command-btn.copied {
17639
+ background-color: rgba(72, 187, 120, 0.2);
17640
+ border-color: rgba(72, 187, 120, 0.4);
17641
+ color: #2f855a;
17642
+ }
17643
+
17644
+ .about-update-help {
17645
+ margin-top: 0.6rem;
17646
+ display: block;
17647
+ opacity: 0.85;
17648
+ }
17649
+
17650
+ .about-update-status code {
17651
+ background-color: rgba(0, 0, 0, 0.1);
17652
+ padding: 0.125rem 0.25rem;
17653
+ border-radius: 3px;
17654
+ font-size: 0.85em;
17655
+ }
17656
+
17657
+ @media (max-width: 640px) {
17658
+ .about-update-link {
17659
+ margin-left: 0;
17660
+ }
17661
+ }
17662
+
17092
17663
  .apikeys-list {
17093
17664
  display: flex;
17094
17665
  flex-direction: column;
@@ -18612,3 +19183,147 @@ body.task-list-open .task-list-side-trigger {
18612
19183
  border-color: var(--color-border);
18613
19184
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
18614
19185
  }
19186
+
19187
+ /* Task Progress Card Styles (New Design) */
19188
+ .task-progress-container {
19189
+ display: flex;
19190
+ flex-direction: column;
19191
+ gap: 24px;
19192
+ padding: 8px 4px 16px;
19193
+ }
19194
+
19195
+ .task-progress-header {
19196
+ display: flex;
19197
+ align-items: center;
19198
+ gap: 16px;
19199
+ }
19200
+
19201
+ .task-progress-track {
19202
+ flex: 1;
19203
+ height: 8px;
19204
+ background-color: #e2e8f0;
19205
+ border-radius: 4px;
19206
+ overflow: hidden;
19207
+ }
19208
+
19209
+ .task-progress-fill {
19210
+ height: 100%;
19211
+ background: linear-gradient(90deg, #10b981 0%, #3b82f6 100%);
19212
+ border-radius: 4px;
19213
+ transition: width 0.5s ease-out;
19214
+ }
19215
+
19216
+ .task-progress-text {
19217
+ font-size: 14px;
19218
+ font-weight: 600;
19219
+ color: var(--color-text-muted);
19220
+ min-width: 40px;
19221
+ text-align: right;
19222
+ }
19223
+
19224
+ .task-todo-list {
19225
+ display: flex;
19226
+ flex-direction: column;
19227
+ gap: 20px;
19228
+ position: relative;
19229
+ }
19230
+
19231
+ /* Vertical connector line */
19232
+ .task-todo-list::before {
19233
+ content: '';
19234
+ position: absolute;
19235
+ top: 14px;
19236
+ bottom: 14px;
19237
+ left: 14px;
19238
+ width: 2px;
19239
+ background-color: #e2e8f0;
19240
+ z-index: 0;
19241
+ }
19242
+
19243
+ .task-todo-item {
19244
+ display: flex;
19245
+ align-items: flex-start;
19246
+ gap: 16px;
19247
+ position: relative;
19248
+ z-index: 1;
19249
+ }
19250
+
19251
+ .task-todo-icon {
19252
+ width: 30px;
19253
+ height: 30px;
19254
+ border-radius: 50%;
19255
+ display: flex;
19256
+ align-items: center;
19257
+ justify-content: center;
19258
+ flex-shrink: 0;
19259
+ font-size: 13px;
19260
+ font-weight: 600;
19261
+ background-color: var(--color-surface); /* Mask the connector line */
19262
+ transition: all 0.2s ease;
19263
+ }
19264
+
19265
+ .task-todo-icon.icon-completed {
19266
+ background-color: #10b981;
19267
+ color: white;
19268
+ border: 2px solid #10b981;
19269
+ }
19270
+
19271
+ .task-todo-icon.icon-completed svg {
19272
+ width: 16px;
19273
+ height: 16px;
19274
+ }
19275
+
19276
+ .task-todo-icon.icon-in-progress {
19277
+ border: 2px solid #3b82f6;
19278
+ color: #3b82f6;
19279
+ background-color: var(--color-surface);
19280
+ }
19281
+
19282
+ .task-todo-icon.icon-in-progress svg {
19283
+ width: 16px;
19284
+ height: 16px;
19285
+ animation: task-spin 2s linear infinite;
19286
+ }
19287
+
19288
+ .task-todo-icon.icon-pending {
19289
+ border: 2px solid #e2e8f0;
19290
+ color: #94a3b8;
19291
+ background-color: var(--color-surface);
19292
+ }
19293
+
19294
+ .task-todo-content {
19295
+ font-size: 15px;
19296
+ line-height: 1.5;
19297
+ color: var(--color-text);
19298
+ padding-top: 3px;
19299
+ font-weight: 500;
19300
+ }
19301
+
19302
+ .task-todo-item.status-completed .task-todo-content {
19303
+ color: var(--color-text-muted);
19304
+ }
19305
+
19306
+ @keyframes task-spin {
19307
+ from { transform: rotate(0deg); }
19308
+ to { transform: rotate(360deg); }
19309
+ }
19310
+
19311
+ /* Dark mode adjustments */
19312
+ :root[data-theme="dark"] .task-progress-track {
19313
+ background-color: #1e293b;
19314
+ }
19315
+
19316
+ :root[data-theme="dark"] .task-todo-list::before {
19317
+ background-color: #1e293b;
19318
+ }
19319
+
19320
+ :root[data-theme="dark"] .task-todo-icon.icon-pending {
19321
+ border-color: #334155;
19322
+ color: #64748b;
19323
+ }
19324
+
19325
+ :root[data-theme="dark"] .task-todo-icon.icon-in-progress,
19326
+ :root[data-theme="dark"] .task-todo-icon.icon-pending {
19327
+ background-color: var(--color-surface);
19328
+ }
19329
+