@profoundlogic/coderflow-server 0.8.7 → 0.8.9
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/dist/base-image/coder-git-credential-helper +4 -1
- package/dist/coder-server.js +1 -1
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.js +1 -1
- package/dist/lib/agent-models.js +1 -1
- package/dist/lib/api-keys.js +1 -1
- package/dist/lib/apiKeys.js +1 -1
- package/dist/lib/app-server-ports.js +1 -1
- package/dist/lib/auto-judge.js +1 -1
- package/dist/lib/automation-service.js +1 -1
- package/dist/lib/basic-auth.js +1 -1
- package/dist/lib/bindings.js +1 -1
- package/dist/lib/build-history.js +1 -1
- package/dist/lib/build-output-service.js +1 -1
- package/dist/lib/build-scheduler.js +1 -1
- package/dist/lib/build-service.js +1 -1
- package/dist/lib/ca-certificates.js +1 -1
- package/dist/lib/claude-oauth-refresh.js +1 -1
- package/dist/lib/cli/build.js +1 -1
- package/dist/lib/cli/cleanup-users.js +1 -1
- package/dist/lib/cli/config-command.js +1 -1
- package/dist/lib/cli/config.js +1 -1
- package/dist/lib/cli/create-user.js +1 -1
- package/dist/lib/cli/grant-admin.js +1 -1
- package/dist/lib/cli/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/list-roles.js +1 -1
- package/dist/lib/cli/list-users.js +1 -1
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -1
- package/dist/lib/compression-filter.js +1 -1
- package/dist/lib/config-migration.js +1 -1
- package/dist/lib/container-credential-sync.js +1 -1
- package/dist/lib/container-tokens.js +1 -1
- package/dist/lib/data-dir.js +1 -1
- package/dist/lib/deployment-history.js +1 -1
- package/dist/lib/deployment-service.js +1 -1
- package/dist/lib/docker-utils.js +1 -1
- package/dist/lib/email.js +1 -1
- package/dist/lib/emailTemplates.js +1 -1
- package/dist/lib/entitlement.js +1 -1
- package/dist/lib/external-connections.js +1 -1
- package/dist/lib/fetch-utils.js +1 -1
- package/dist/lib/git-commit-details-route.js +1 -1
- package/dist/lib/git-history-diff-guardrails.js +1 -1
- package/dist/lib/git-provider-service.js +1 -1
- package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
- package/dist/lib/git-provider-setup/index.js +1 -1
- package/dist/lib/git-provider-setup/setup-factory.js +1 -1
- package/dist/lib/git-provider-setup/setup-interface.js +1 -1
- package/dist/lib/git-providers/azure-devops-provider.js +1 -1
- package/dist/lib/git-providers/github-app-provider.js +1 -1
- package/dist/lib/git-providers/index.js +1 -1
- package/dist/lib/git-providers/provider-factory.js +1 -1
- package/dist/lib/git-providers/provider-interface.js +1 -1
- package/dist/lib/github-urls.js +1 -1
- package/dist/lib/group-objective-linking.js +1 -1
- package/dist/lib/ibmi-sync.js +1 -1
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/memory-utils.js +1 -1
- package/dist/lib/migration-to-scoped-rbac.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.js +1 -1
- package/dist/lib/objective-context.js +1 -1
- package/dist/lib/oidc-auth.js +1 -1
- package/dist/lib/oidc-device-flow.js +1 -1
- package/dist/lib/passwordTokens.js +1 -1
- package/dist/lib/permission-resolver.js +1 -1
- package/dist/lib/pin-cascade.js +1 -1
- package/dist/lib/provider-accounts.js +1 -1
- package/dist/lib/provider-oauth.js +1 -1
- package/dist/lib/provider-profile.js +1 -1
- package/dist/lib/provider-token-refresh.js +1 -1
- package/dist/lib/rbac-user-state.js +1 -1
- package/dist/lib/request-url.js +1 -1
- package/dist/lib/rewind.js +1 -1
- package/dist/lib/role-definitions.js +1 -1
- package/dist/lib/roles.js +1 -1
- package/dist/lib/secrets.js +1 -1
- package/dist/lib/setup-repo-git-auth.js +1 -1
- package/dist/lib/slack-service.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-aliases.js +1 -1
- package/dist/lib/task-container-init.js +1 -1
- package/dist/lib/task-context-usage.js +1 -1
- package/dist/lib/task-git-auth-errors.js +1 -0
- package/dist/lib/task-name-format.js +1 -1
- package/dist/lib/task-name-generator.js +1 -1
- package/dist/lib/task-source-metadata.js +1 -1
- package/dist/lib/teams.js +1 -1
- package/dist/lib/user-git-oauth.js +1 -1
- package/dist/lib/user-git-tokens.js +1 -1
- package/dist/lib/users.js +1 -1
- package/dist/middleware/requireAuth.js +1 -1
- package/dist/middleware/requireInit.js +1 -1
- package/dist/middleware/requirePermission.js +1 -1
- package/dist/package.json +1 -1
- package/dist/playwright.config.js +1 -1
- package/dist/playwright.task-terminal.config.js +1 -1
- package/dist/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/automations.js +1 -1
- package/dist/routes/bindings.js +1 -1
- package/dist/routes/build.js +1 -1
- package/dist/routes/containers.js +1 -1
- package/dist/routes/deploy-task.js +1 -1
- package/dist/routes/environment-management.js +1 -1
- package/dist/routes/environments.js +1 -1
- package/dist/routes/external-skills.js +1 -1
- package/dist/routes/git-credentials.js +1 -1
- package/dist/routes/git-oauth.js +1 -1
- package/dist/routes/git-provider-setup.js +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/jira.js +1 -1
- package/dist/routes/logs.js +1 -1
- package/dist/routes/objective-management.js +1 -1
- package/dist/routes/password.js +1 -1
- package/dist/routes/prompt.js +1 -1
- package/dist/routes/provider-auth.js +1 -1
- package/dist/routes/qa.js +1 -1
- package/dist/routes/roles.js +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/skill-management.js +1 -1
- package/dist/routes/skills.js +1 -1
- package/dist/routes/slack.js +1 -1
- package/dist/routes/stats.js +1 -1
- package/dist/routes/tasks.js +1 -1
- package/dist/routes/teams.js +1 -1
- package/dist/routes/templates.js +1 -1
- package/dist/routes/test-task.js +1 -1
- package/dist/routes/test.js +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/visualizations.js +1 -1
- package/dist/scripts/create-user.js +1 -1
- package/dist/scripts/migrate-config-to-data-dir.js +1 -1
- package/dist/start.js +1 -1
- package/dist/web-ui/public/activity-detail-modal.js +1 -1
- package/dist/web-ui/public/activity-feed.js +1 -1
- package/dist/web-ui/public/activity-formatters.js +1 -1
- package/dist/web-ui/public/admin.css +476 -0
- package/dist/web-ui/public/admin.html +96 -17
- package/dist/web-ui/public/admin.js +1 -1
- package/dist/web-ui/public/agent-event-parser.js +1 -1
- package/dist/web-ui/public/app.js +1 -1
- package/dist/web-ui/public/approve-dialog.js +1 -1
- package/dist/web-ui/public/automation-links.js +1 -1
- package/dist/web-ui/public/automation-schedule.js +1 -1
- package/dist/web-ui/public/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/docs/_sidebar.md +1 -0
- package/dist/web-ui/public/docs/admin/automations.md +8 -7
- package/dist/web-ui/public/docs/admin/container-lifecycle.md +102 -0
- package/dist/web-ui/public/docs/admin/jira.md +20 -3
- package/dist/web-ui/public/docs/code/files-and-editing.md +11 -0
- package/dist/web-ui/public/docs/docsify-proxy-helper.js +1 -0
- package/dist/web-ui/public/docs/index.html +25 -18
- package/dist/web-ui/public/environments.html +20 -7
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.css +59 -2
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/file-selection-tree.js +1 -1
- package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
- package/dist/web-ui/public/git-history.js +1 -1
- package/dist/web-ui/public/git-status.js +1 -1
- package/dist/web-ui/public/ibmi-file-filter.js +1 -1
- package/dist/web-ui/public/index.js +1 -1
- package/dist/web-ui/public/login.js +1 -1
- package/dist/web-ui/public/markdown-editor.js +1 -1
- package/dist/web-ui/public/markdown-file-editor.js +1 -1
- package/dist/web-ui/public/modal-maximize.js +1 -1
- package/dist/web-ui/public/notifications.js +1 -1
- package/dist/web-ui/public/permissions.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- package/dist/web-ui/public/roles.js +1 -1
- package/dist/web-ui/public/settings.html +101 -2
- package/dist/web-ui/public/settings.js +1 -1
- package/dist/web-ui/public/setup-password.js +1 -1
- package/dist/web-ui/public/skills.js +1 -1
- package/dist/web-ui/public/sse-client.js +1 -1
- package/dist/web-ui/public/sse-client.transport-warning.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +20 -0
- package/dist/web-ui/public/task-judging-helpers.js +1 -1
- package/dist/web-ui/public/task.js +1 -1
- package/dist/web-ui/public/teams.js +1 -1
- package/dist/web-ui/public/terminal.js +1 -1
- package/dist/web-ui/public/theme.js +1 -1
- package/dist/web-ui/public/users.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -257,6 +257,39 @@
|
|
|
257
257
|
font-size: 13px;
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
+
.admin-usage-intro {
|
|
261
|
+
display: flex;
|
|
262
|
+
align-items: flex-start;
|
|
263
|
+
justify-content: space-between;
|
|
264
|
+
gap: 12px;
|
|
265
|
+
margin-bottom: 16px;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.admin-drilldown-hint {
|
|
269
|
+
margin: 0;
|
|
270
|
+
font-size: 13px;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.admin-section-header {
|
|
274
|
+
display: flex;
|
|
275
|
+
align-items: flex-start;
|
|
276
|
+
justify-content: space-between;
|
|
277
|
+
gap: 12px;
|
|
278
|
+
flex-wrap: wrap;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.admin-section-subtitle {
|
|
282
|
+
margin: 6px 0 0;
|
|
283
|
+
font-size: 12px;
|
|
284
|
+
color: var(--color-text-muted);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.admin-section-actions {
|
|
288
|
+
display: flex;
|
|
289
|
+
flex-wrap: wrap;
|
|
290
|
+
gap: 8px;
|
|
291
|
+
}
|
|
292
|
+
|
|
260
293
|
.admin-log-container {
|
|
261
294
|
max-height: 70vh;
|
|
262
295
|
overflow: auto;
|
|
@@ -516,6 +549,21 @@
|
|
|
516
549
|
border-bottom: none;
|
|
517
550
|
}
|
|
518
551
|
|
|
552
|
+
.admin-data-table tbody tr.admin-drilldown-row {
|
|
553
|
+
cursor: pointer;
|
|
554
|
+
transition: background 0.2s ease, box-shadow 0.2s ease;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.admin-data-table tbody tr.admin-drilldown-row:hover,
|
|
558
|
+
.admin-data-table tbody tr.admin-drilldown-row.active {
|
|
559
|
+
background: rgba(63, 114, 255, 0.08);
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
.admin-data-table tbody tr.admin-drilldown-row:focus-visible {
|
|
563
|
+
outline: 2px solid var(--color-accent);
|
|
564
|
+
outline-offset: -2px;
|
|
565
|
+
}
|
|
566
|
+
|
|
519
567
|
.admin-bar-list {
|
|
520
568
|
display: flex;
|
|
521
569
|
flex-direction: column;
|
|
@@ -529,6 +577,29 @@
|
|
|
529
577
|
align-items: center;
|
|
530
578
|
}
|
|
531
579
|
|
|
580
|
+
.admin-bar-row-button {
|
|
581
|
+
width: 100%;
|
|
582
|
+
padding: 0;
|
|
583
|
+
border: none;
|
|
584
|
+
background: transparent;
|
|
585
|
+
text-align: left;
|
|
586
|
+
cursor: pointer;
|
|
587
|
+
border-radius: var(--radius-medium);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.admin-bar-row-button:hover .admin-bar-track {
|
|
591
|
+
box-shadow: 0 0 0 1px rgba(63, 114, 255, 0.18);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
.admin-bar-row-button.active .admin-bar-track {
|
|
595
|
+
box-shadow: 0 0 0 2px rgba(63, 114, 255, 0.24);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
.admin-bar-row-button:focus-visible {
|
|
599
|
+
outline: 2px solid var(--color-accent);
|
|
600
|
+
outline-offset: 4px;
|
|
601
|
+
}
|
|
602
|
+
|
|
532
603
|
.admin-bar-label {
|
|
533
604
|
font-size: 13px;
|
|
534
605
|
font-weight: 600;
|
|
@@ -700,6 +771,187 @@
|
|
|
700
771
|
background: var(--color-success);
|
|
701
772
|
}
|
|
702
773
|
|
|
774
|
+
.admin-drilldown-drawer {
|
|
775
|
+
width: min(540px, 100vw);
|
|
776
|
+
max-width: 100%;
|
|
777
|
+
padding: 28px;
|
|
778
|
+
gap: 18px;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.admin-drilldown-header h2 {
|
|
782
|
+
margin: 4px 0 0;
|
|
783
|
+
font-size: 24px;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
.admin-drilldown-eyebrow {
|
|
787
|
+
font-size: 12px;
|
|
788
|
+
font-weight: 700;
|
|
789
|
+
letter-spacing: 0.06em;
|
|
790
|
+
text-transform: uppercase;
|
|
791
|
+
color: var(--color-accent);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
.admin-drilldown-subtitle {
|
|
795
|
+
margin: 8px 0 0;
|
|
796
|
+
font-size: 13px;
|
|
797
|
+
line-height: 1.5;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.admin-drilldown-section {
|
|
801
|
+
min-height: 0;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
.admin-drilldown-summary {
|
|
805
|
+
display: grid;
|
|
806
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
807
|
+
gap: 10px;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
.admin-drilldown-summary-card {
|
|
811
|
+
border: 1px solid var(--color-border);
|
|
812
|
+
border-radius: var(--radius-medium);
|
|
813
|
+
padding: 14px;
|
|
814
|
+
background: var(--color-surface-muted);
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
.admin-drilldown-summary-label {
|
|
818
|
+
font-size: 11px;
|
|
819
|
+
font-weight: 700;
|
|
820
|
+
color: var(--color-text-muted);
|
|
821
|
+
letter-spacing: 0.05em;
|
|
822
|
+
text-transform: uppercase;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
.admin-drilldown-summary-value {
|
|
826
|
+
margin-top: 8px;
|
|
827
|
+
font-size: 22px;
|
|
828
|
+
font-weight: 700;
|
|
829
|
+
color: var(--color-text);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.admin-drilldown-summary-meta {
|
|
833
|
+
margin-top: 6px;
|
|
834
|
+
font-size: 12px;
|
|
835
|
+
color: var(--color-text-muted);
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
.admin-drilldown-list {
|
|
839
|
+
display: flex;
|
|
840
|
+
flex-direction: column;
|
|
841
|
+
gap: 12px;
|
|
842
|
+
overflow-y: auto;
|
|
843
|
+
padding-right: 4px;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
.admin-drilldown-card {
|
|
847
|
+
border: 1px solid var(--color-border);
|
|
848
|
+
border-radius: var(--radius-medium);
|
|
849
|
+
background: var(--color-surface);
|
|
850
|
+
padding: 16px;
|
|
851
|
+
display: flex;
|
|
852
|
+
flex-direction: column;
|
|
853
|
+
gap: 14px;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
.admin-drilldown-card-header {
|
|
857
|
+
display: flex;
|
|
858
|
+
align-items: flex-start;
|
|
859
|
+
justify-content: space-between;
|
|
860
|
+
gap: 12px;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
.admin-drilldown-card-title {
|
|
864
|
+
min-width: 0;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
.admin-drilldown-task-name {
|
|
868
|
+
margin: 0;
|
|
869
|
+
font-size: 16px;
|
|
870
|
+
line-height: 1.4;
|
|
871
|
+
color: var(--color-text);
|
|
872
|
+
word-break: break-word;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
.admin-drilldown-task-id {
|
|
876
|
+
margin-top: 4px;
|
|
877
|
+
font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
|
|
878
|
+
font-size: 11px;
|
|
879
|
+
color: var(--color-text-muted);
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
.admin-drilldown-meta {
|
|
883
|
+
display: grid;
|
|
884
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
885
|
+
gap: 10px 14px;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
.admin-drilldown-meta-item {
|
|
889
|
+
display: flex;
|
|
890
|
+
flex-direction: column;
|
|
891
|
+
gap: 3px;
|
|
892
|
+
min-width: 0;
|
|
893
|
+
font-size: 13px;
|
|
894
|
+
color: var(--color-text);
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
.admin-drilldown-meta-label {
|
|
898
|
+
font-size: 11px;
|
|
899
|
+
font-weight: 700;
|
|
900
|
+
color: var(--color-text-muted);
|
|
901
|
+
letter-spacing: 0.05em;
|
|
902
|
+
text-transform: uppercase;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.admin-drilldown-stats,
|
|
906
|
+
.admin-drilldown-flags {
|
|
907
|
+
display: flex;
|
|
908
|
+
flex-wrap: wrap;
|
|
909
|
+
gap: 8px;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.admin-drilldown-chip,
|
|
913
|
+
.admin-drilldown-flag {
|
|
914
|
+
display: inline-flex;
|
|
915
|
+
align-items: center;
|
|
916
|
+
padding: 5px 10px;
|
|
917
|
+
border-radius: 999px;
|
|
918
|
+
font-size: 12px;
|
|
919
|
+
font-weight: 600;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.admin-drilldown-chip {
|
|
923
|
+
background: rgba(31, 42, 68, 0.08);
|
|
924
|
+
color: var(--color-text-muted);
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
.admin-drilldown-flag.approved {
|
|
928
|
+
background: rgba(46, 182, 125, 0.14);
|
|
929
|
+
color: var(--color-success);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
.admin-drilldown-flag.pushed {
|
|
933
|
+
background: rgba(63, 114, 255, 0.14);
|
|
934
|
+
color: var(--color-accent);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
.admin-drilldown-flag.changed {
|
|
938
|
+
background: rgba(245, 158, 11, 0.14);
|
|
939
|
+
color: var(--color-warning, #f59e0b);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
.admin-drilldown-flag.neutral {
|
|
943
|
+
background: rgba(31, 42, 68, 0.08);
|
|
944
|
+
color: var(--color-text-muted);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
.admin-drilldown-actions {
|
|
948
|
+
display: flex;
|
|
949
|
+
align-items: center;
|
|
950
|
+
justify-content: space-between;
|
|
951
|
+
gap: 12px;
|
|
952
|
+
flex-wrap: wrap;
|
|
953
|
+
}
|
|
954
|
+
|
|
703
955
|
.settings-nav-item svg {
|
|
704
956
|
flex-shrink: 0;
|
|
705
957
|
}
|
|
@@ -736,6 +988,11 @@
|
|
|
736
988
|
.admin-impact-cards {
|
|
737
989
|
grid-template-columns: 1fr;
|
|
738
990
|
}
|
|
991
|
+
|
|
992
|
+
.admin-drilldown-summary,
|
|
993
|
+
.admin-drilldown-meta {
|
|
994
|
+
grid-template-columns: 1fr;
|
|
995
|
+
}
|
|
739
996
|
}
|
|
740
997
|
|
|
741
998
|
#health-content {
|
|
@@ -834,3 +1091,222 @@
|
|
|
834
1091
|
.admin-restart-overlay-content p {
|
|
835
1092
|
margin: 0 0 16px;
|
|
836
1093
|
}
|
|
1094
|
+
|
|
1095
|
+
/* Drilldown metric cards */
|
|
1096
|
+
|
|
1097
|
+
.metric-card-drilldown {
|
|
1098
|
+
cursor: pointer;
|
|
1099
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
.metric-card-drilldown:hover {
|
|
1103
|
+
border-color: var(--color-accent);
|
|
1104
|
+
box-shadow: 0 2px 8px rgba(63, 114, 255, 0.1);
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
.metric-card-drilldown:focus-visible {
|
|
1108
|
+
outline: 2px solid var(--color-accent);
|
|
1109
|
+
outline-offset: 2px;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
.drilldown-chevron {
|
|
1113
|
+
opacity: 0;
|
|
1114
|
+
vertical-align: middle;
|
|
1115
|
+
margin-left: 2px;
|
|
1116
|
+
color: var(--color-accent);
|
|
1117
|
+
transition: opacity 0.2s ease;
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
.metric-card-drilldown:hover .drilldown-chevron {
|
|
1121
|
+
opacity: 1;
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
/* Drilldown modal */
|
|
1125
|
+
|
|
1126
|
+
.drilldown-modal-content {
|
|
1127
|
+
max-width: 860px;
|
|
1128
|
+
width: 90vw;
|
|
1129
|
+
max-height: 85vh;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
.drilldown-modal-body {
|
|
1133
|
+
overflow-y: auto;
|
|
1134
|
+
max-height: calc(85vh - 64px);
|
|
1135
|
+
padding: 20px 24px 24px;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
.drilldown-section {
|
|
1139
|
+
margin-bottom: 24px;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
.drilldown-section:last-child {
|
|
1143
|
+
margin-bottom: 0;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
.drilldown-section-title {
|
|
1147
|
+
font-size: 12px;
|
|
1148
|
+
font-weight: 700;
|
|
1149
|
+
color: var(--color-text-muted);
|
|
1150
|
+
text-transform: uppercase;
|
|
1151
|
+
letter-spacing: 0.05em;
|
|
1152
|
+
margin-bottom: 12px;
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
.drilldown-info-grid {
|
|
1156
|
+
display: grid;
|
|
1157
|
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
1158
|
+
gap: 12px;
|
|
1159
|
+
margin-bottom: 20px;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
.drilldown-info-item {
|
|
1163
|
+
padding: 12px 14px;
|
|
1164
|
+
border-radius: var(--radius-medium);
|
|
1165
|
+
background: var(--color-surface-muted);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
.drilldown-info-label {
|
|
1169
|
+
font-size: 11px;
|
|
1170
|
+
font-weight: 700;
|
|
1171
|
+
color: var(--color-text-muted);
|
|
1172
|
+
text-transform: uppercase;
|
|
1173
|
+
letter-spacing: 0.04em;
|
|
1174
|
+
margin-bottom: 4px;
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
.drilldown-info-value {
|
|
1178
|
+
font-size: 14px;
|
|
1179
|
+
font-weight: 600;
|
|
1180
|
+
color: var(--color-text);
|
|
1181
|
+
word-break: break-all;
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
.drilldown-table-wrap {
|
|
1185
|
+
overflow-x: auto;
|
|
1186
|
+
border: 1px solid var(--color-border);
|
|
1187
|
+
border-radius: var(--radius-medium);
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
.drilldown-table {
|
|
1191
|
+
width: 100%;
|
|
1192
|
+
border-collapse: collapse;
|
|
1193
|
+
font-size: 13px;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
.drilldown-table th,
|
|
1197
|
+
.drilldown-table td {
|
|
1198
|
+
padding: 10px 14px;
|
|
1199
|
+
text-align: left;
|
|
1200
|
+
border-bottom: 1px solid var(--color-border);
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
.drilldown-table th {
|
|
1204
|
+
font-size: 11px;
|
|
1205
|
+
font-weight: 700;
|
|
1206
|
+
color: var(--color-text-muted);
|
|
1207
|
+
text-transform: uppercase;
|
|
1208
|
+
letter-spacing: 0.04em;
|
|
1209
|
+
background: var(--color-surface-muted);
|
|
1210
|
+
position: sticky;
|
|
1211
|
+
top: 0;
|
|
1212
|
+
z-index: 1;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
.drilldown-table tbody tr:last-child td {
|
|
1216
|
+
border-bottom: none;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
.drilldown-table tbody tr:hover {
|
|
1220
|
+
background: rgba(63, 114, 255, 0.04);
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
.drilldown-status {
|
|
1224
|
+
display: inline-flex;
|
|
1225
|
+
align-items: center;
|
|
1226
|
+
padding: 2px 8px;
|
|
1227
|
+
border-radius: 999px;
|
|
1228
|
+
font-size: 11px;
|
|
1229
|
+
font-weight: 700;
|
|
1230
|
+
letter-spacing: 0.04em;
|
|
1231
|
+
text-transform: uppercase;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
.drilldown-status-running {
|
|
1235
|
+
background: rgba(46, 182, 125, 0.14);
|
|
1236
|
+
color: var(--color-success);
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
.drilldown-status-exited,
|
|
1240
|
+
.drilldown-status-stopped,
|
|
1241
|
+
.drilldown-status-dead {
|
|
1242
|
+
background: rgba(229, 83, 104, 0.12);
|
|
1243
|
+
color: var(--color-danger);
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
.drilldown-status-created,
|
|
1247
|
+
.drilldown-status-paused {
|
|
1248
|
+
background: rgba(245, 158, 11, 0.16);
|
|
1249
|
+
color: var(--color-warning, #f59e0b);
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
.drilldown-actions {
|
|
1253
|
+
display: flex;
|
|
1254
|
+
gap: 6px;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
.drilldown-actions .btn-small {
|
|
1258
|
+
padding: 2px 10px;
|
|
1259
|
+
min-height: 28px;
|
|
1260
|
+
font-size: 12px;
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
.drilldown-empty {
|
|
1264
|
+
text-align: center;
|
|
1265
|
+
padding: 32px 16px;
|
|
1266
|
+
color: var(--color-text-muted);
|
|
1267
|
+
font-size: 14px;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
.drilldown-tag-list {
|
|
1271
|
+
display: flex;
|
|
1272
|
+
flex-wrap: wrap;
|
|
1273
|
+
gap: 4px;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
.drilldown-tag {
|
|
1277
|
+
display: inline-block;
|
|
1278
|
+
padding: 1px 6px;
|
|
1279
|
+
border-radius: 4px;
|
|
1280
|
+
background: var(--color-surface-muted);
|
|
1281
|
+
font-size: 12px;
|
|
1282
|
+
font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
|
|
1283
|
+
color: var(--color-text);
|
|
1284
|
+
max-width: 280px;
|
|
1285
|
+
overflow: hidden;
|
|
1286
|
+
text-overflow: ellipsis;
|
|
1287
|
+
white-space: nowrap;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
.drilldown-inline-message {
|
|
1291
|
+
margin-bottom: 16px;
|
|
1292
|
+
padding: 10px 14px;
|
|
1293
|
+
border-radius: var(--radius-medium);
|
|
1294
|
+
background: rgba(63, 114, 255, 0.08);
|
|
1295
|
+
color: var(--color-text);
|
|
1296
|
+
font-size: 13px;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
@media (max-width: 720px) {
|
|
1300
|
+
.drilldown-modal-content {
|
|
1301
|
+
width: 98vw;
|
|
1302
|
+
max-height: 92vh;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.drilldown-info-grid {
|
|
1306
|
+
grid-template-columns: 1fr;
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
.drilldown-modal-body {
|
|
1310
|
+
padding: 16px;
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
@@ -230,50 +230,50 @@
|
|
|
230
230
|
</div>
|
|
231
231
|
|
|
232
232
|
<div class="health-metrics">
|
|
233
|
-
<div class="metric-card">
|
|
233
|
+
<div class="metric-card metric-card-drilldown" data-drilldown="system" role="button" tabindex="0" title="View system details">
|
|
234
234
|
<div class="metric-icon">💻</div>
|
|
235
235
|
<div class="metric-details">
|
|
236
|
-
<div class="metric-label">CPU Usage
|
|
236
|
+
<div class="metric-label">CPU Usage <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
237
237
|
<div class="metric-value" id="cpu-usage">-</div>
|
|
238
238
|
<div class="metric-progress" role="progressbar" aria-label="CPU usage" aria-valuemin="0" aria-valuemax="100">
|
|
239
239
|
<div class="metric-progress-fill" id="cpu-progress"></div>
|
|
240
240
|
</div>
|
|
241
241
|
</div>
|
|
242
242
|
</div>
|
|
243
|
-
<div class="metric-card">
|
|
243
|
+
<div class="metric-card metric-card-drilldown" data-drilldown="system" role="button" tabindex="0" title="View system details">
|
|
244
244
|
<div class="metric-icon">🧠</div>
|
|
245
245
|
<div class="metric-details">
|
|
246
|
-
<div class="metric-label">Memory Usage
|
|
246
|
+
<div class="metric-label">Memory Usage <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
247
247
|
<div class="metric-value" id="memory-usage">-</div>
|
|
248
248
|
<div class="metric-progress" role="progressbar" aria-label="Memory usage" aria-valuemin="0" aria-valuemax="100">
|
|
249
249
|
<div class="metric-progress-fill" id="memory-progress"></div>
|
|
250
250
|
</div>
|
|
251
251
|
</div>
|
|
252
252
|
</div>
|
|
253
|
-
<div class="metric-card">
|
|
253
|
+
<div class="metric-card metric-card-drilldown" data-drilldown="system" role="button" tabindex="0" title="View system details">
|
|
254
254
|
<div class="metric-icon">💾</div>
|
|
255
255
|
<div class="metric-details">
|
|
256
|
-
<div class="metric-label">Disk Usage
|
|
256
|
+
<div class="metric-label">Disk Usage <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
257
257
|
<div class="metric-value" id="disk-usage">-</div>
|
|
258
258
|
<div class="metric-progress" role="progressbar" aria-label="Disk usage" aria-valuemin="0" aria-valuemax="100">
|
|
259
259
|
<div class="metric-progress-fill" id="disk-progress"></div>
|
|
260
260
|
</div>
|
|
261
261
|
</div>
|
|
262
262
|
</div>
|
|
263
|
-
<div class="metric-card">
|
|
263
|
+
<div class="metric-card metric-card-drilldown" data-drilldown="containers" role="button" tabindex="0" title="View container details">
|
|
264
264
|
<div class="metric-icon">🐳</div>
|
|
265
265
|
<div class="metric-details">
|
|
266
|
-
<div class="metric-label">Docker Containers
|
|
266
|
+
<div class="metric-label">Docker Containers <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
267
267
|
<div class="metric-value" id="docker-containers">-</div>
|
|
268
268
|
<div class="metric-progress" role="progressbar" aria-label="Running containers ratio" aria-valuemin="0" aria-valuemax="100">
|
|
269
269
|
<div class="metric-progress-fill" id="docker-progress"></div>
|
|
270
270
|
</div>
|
|
271
271
|
</div>
|
|
272
272
|
</div>
|
|
273
|
-
<div class="metric-card metric-card-wide" id="docker-storage-card">
|
|
273
|
+
<div class="metric-card metric-card-wide metric-card-drilldown" id="docker-storage-card" data-drilldown="storage" role="button" tabindex="0" title="View storage details">
|
|
274
274
|
<div class="metric-icon">📦</div>
|
|
275
275
|
<div class="metric-details">
|
|
276
|
-
<div class="metric-label">Docker Storage
|
|
276
|
+
<div class="metric-label">Docker Storage <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
277
277
|
<div class="metric-value" id="docker-storage-total">-</div>
|
|
278
278
|
<div class="metric-progress" role="progressbar" aria-label="Docker storage usage" aria-valuemin="0" aria-valuemax="100">
|
|
279
279
|
<div class="metric-progress-fill" id="docker-storage-progress"></div>
|
|
@@ -300,17 +300,17 @@
|
|
|
300
300
|
</div>
|
|
301
301
|
</div>
|
|
302
302
|
</div>
|
|
303
|
-
<div class="metric-card">
|
|
303
|
+
<div class="metric-card metric-card-drilldown" data-drilldown="system" role="button" tabindex="0" title="View system details">
|
|
304
304
|
<div class="metric-icon">⏱️</div>
|
|
305
305
|
<div class="metric-details">
|
|
306
|
-
<div class="metric-label">Server Uptime
|
|
306
|
+
<div class="metric-label">Server Uptime <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
307
307
|
<div class="metric-value" id="server-uptime">-</div>
|
|
308
308
|
</div>
|
|
309
309
|
</div>
|
|
310
|
-
<div class="metric-card">
|
|
310
|
+
<div class="metric-card metric-card-drilldown" data-drilldown="sessions" role="button" tabindex="0" title="View active sessions">
|
|
311
311
|
<div class="metric-icon">📡</div>
|
|
312
312
|
<div class="metric-details">
|
|
313
|
-
<div class="metric-label">Active Sessions
|
|
313
|
+
<div class="metric-label">Active Sessions <svg class="drilldown-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></div>
|
|
314
314
|
<div class="metric-value" id="active-sessions">-</div>
|
|
315
315
|
</div>
|
|
316
316
|
</div>
|
|
@@ -508,7 +508,12 @@
|
|
|
508
508
|
<p class="text-muted">Choose a different time period or environment.</p>
|
|
509
509
|
</div>
|
|
510
510
|
<div id="usage-content" hidden>
|
|
511
|
-
<div class="admin-usage-
|
|
511
|
+
<div class="admin-usage-intro">
|
|
512
|
+
<div>
|
|
513
|
+
<div class="admin-usage-period text-muted" id="usage-period-summary"></div>
|
|
514
|
+
<p class="admin-drilldown-hint text-muted">Click a bar, row, or action button to inspect matching tasks.</p>
|
|
515
|
+
</div>
|
|
516
|
+
</div>
|
|
512
517
|
<div class="admin-summary-grid">
|
|
513
518
|
<div class="admin-summary-card">
|
|
514
519
|
<div class="admin-summary-label">Total Tasks</div>
|
|
@@ -610,8 +615,31 @@
|
|
|
610
615
|
</section>
|
|
611
616
|
|
|
612
617
|
<section class="admin-usage-section">
|
|
613
|
-
<div class="section-header">
|
|
614
|
-
<
|
|
618
|
+
<div class="section-header admin-section-header">
|
|
619
|
+
<div>
|
|
620
|
+
<h3>Code Impact</h3>
|
|
621
|
+
<p class="admin-section-subtitle">Open the matching tasks for repository changes or approvals.</p>
|
|
622
|
+
</div>
|
|
623
|
+
<div class="admin-section-actions">
|
|
624
|
+
<button
|
|
625
|
+
type="button"
|
|
626
|
+
class="btn-secondary btn-small admin-drilldown-action"
|
|
627
|
+
data-drilldown-group="changes"
|
|
628
|
+
data-drilldown-value="changed"
|
|
629
|
+
data-drilldown-label="Tasks with Code Changes"
|
|
630
|
+
>
|
|
631
|
+
Changed Tasks
|
|
632
|
+
</button>
|
|
633
|
+
<button
|
|
634
|
+
type="button"
|
|
635
|
+
class="btn-secondary btn-small admin-drilldown-action"
|
|
636
|
+
data-drilldown-group="approval"
|
|
637
|
+
data-drilldown-value="approved"
|
|
638
|
+
data-drilldown-label="Approved Tasks"
|
|
639
|
+
>
|
|
640
|
+
Approved Tasks
|
|
641
|
+
</button>
|
|
642
|
+
</div>
|
|
615
643
|
</div>
|
|
616
644
|
<div class="admin-impact-cards">
|
|
617
645
|
<div class="admin-impact-card">
|
|
@@ -661,6 +689,34 @@
|
|
|
661
689
|
</div>
|
|
662
690
|
</main>
|
|
663
691
|
|
|
692
|
+
<div id="usage-drilldown-overlay" class="drawer-overlay" hidden></div>
|
|
693
|
+
<aside id="usage-drilldown-drawer" class="reference-drawer admin-drilldown-drawer" hidden aria-hidden="true">
|
|
694
|
+
<div class="drawer-header admin-drilldown-header">
|
|
695
|
+
<div>
|
|
696
|
+
<div class="admin-drilldown-eyebrow">Usage Drilldown</div>
|
|
697
|
+
<h2 id="usage-drilldown-title">Tasks</h2>
|
|
698
|
+
<p id="usage-drilldown-subtitle" class="admin-drilldown-subtitle text-muted">Select a usage slice to inspect matching tasks.</p>
|
|
699
|
+
</div>
|
|
700
|
+
<button type="button" class="btn-ghost btn-small" id="usage-drilldown-close">Close</button>
|
|
701
|
+
</div>
|
|
702
|
+
<div class="drawer-section admin-drilldown-section">
|
|
703
|
+
<div id="usage-drilldown-summary" class="admin-drilldown-summary" hidden></div>
|
|
704
|
+
<div id="usage-drilldown-loading" class="loading" hidden>Loading matching tasks...</div>
|
|
705
|
+
<div id="usage-drilldown-error" class="empty-state-card" hidden>
|
|
706
|
+
<div class="empty-state-icon">!</div>
|
|
707
|
+
<h2>Unable to load drilldown</h2>
|
|
708
|
+
<p id="usage-drilldown-error-message" class="text-muted"></p>
|
|
709
|
+
<button class="btn-primary" id="retry-usage-drilldown-btn">Try Again</button>
|
|
710
|
+
</div>
|
|
711
|
+
<div id="usage-drilldown-empty" class="empty-state-card" hidden>
|
|
712
|
+
<div class="empty-state-icon">∅</div>
|
|
713
|
+
<h2>No matching tasks</h2>
|
|
714
|
+
<p class="text-muted">Try a different drilldown or broaden the current filters.</p>
|
|
715
|
+
</div>
|
|
716
|
+
<div id="usage-drilldown-list" class="admin-drilldown-list" hidden></div>
|
|
717
|
+
</div>
|
|
718
|
+
</aside>
|
|
719
|
+
|
|
664
720
|
<div id="restart-modal" class="modal" hidden>
|
|
665
721
|
<div class="modal-overlay"></div>
|
|
666
722
|
<div class="modal-content">
|
|
@@ -678,5 +734,28 @@
|
|
|
678
734
|
</div>
|
|
679
735
|
</div>
|
|
680
736
|
</div>
|
|
737
|
+
|
|
738
|
+
<div id="drilldown-modal" class="modal" hidden>
|
|
739
|
+
<div class="modal-overlay" id="drilldown-modal-overlay"></div>
|
|
740
|
+
<div class="modal-content drilldown-modal-content">
|
|
741
|
+
<div class="modal-header">
|
|
742
|
+
<h2 id="drilldown-modal-title">Details</h2>
|
|
743
|
+
<button class="modal-close" id="close-drilldown-modal" aria-label="Close">×</button>
|
|
744
|
+
</div>
|
|
745
|
+
<div class="modal-body drilldown-modal-body">
|
|
746
|
+
<div id="drilldown-loading" class="loading" hidden>
|
|
747
|
+
<svg class="loading-spinner" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
748
|
+
<path d="M21 12a9 9 0 1 1-6.219-8.56"></path>
|
|
749
|
+
</svg>
|
|
750
|
+
<span>Loading details...</span>
|
|
751
|
+
</div>
|
|
752
|
+
<div id="drilldown-error" class="empty-state-card" hidden>
|
|
753
|
+
<div class="empty-state-icon">!</div>
|
|
754
|
+
<p id="drilldown-error-message" class="text-muted"></p>
|
|
755
|
+
</div>
|
|
756
|
+
<div id="drilldown-content"></div>
|
|
757
|
+
</div>
|
|
758
|
+
</div>
|
|
759
|
+
</div>
|
|
681
760
|
</body>
|
|
682
761
|
</html>
|