fraim-framework 2.0.170 → 2.0.173

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 (39) hide show
  1. package/dist/src/ai-hub/hosts.js +227 -6
  2. package/dist/src/ai-hub/server.js +1014 -35
  3. package/dist/src/cli/commands/add-ide.js +4 -2
  4. package/dist/src/cli/commands/cleanup-artifacts.js +38 -0
  5. package/dist/src/cli/commands/init-project.js +12 -5
  6. package/dist/src/cli/commands/setup.js +1 -1
  7. package/dist/src/cli/commands/sync.js +74 -7
  8. package/dist/src/cli/doctor/checks/ide-config-checks.js +2 -2
  9. package/dist/src/cli/fraim.js +2 -0
  10. package/dist/src/cli/mcp/ide-formats.js +10 -2
  11. package/dist/src/cli/setup/auto-mcp-setup.js +4 -2
  12. package/dist/src/cli/setup/ide-detector.js +26 -0
  13. package/dist/src/cli/setup/ide-global-integration.js +6 -2
  14. package/dist/src/cli/setup/ide-invocation-surfaces.js +12 -4
  15. package/dist/src/cli/setup/mcp-config-generator.js +12 -1
  16. package/dist/src/cli/utils/agent-adapters.js +42 -17
  17. package/dist/src/cli/utils/fraim-gitignore.js +13 -0
  18. package/dist/src/cli/utils/remote-sync.js +129 -53
  19. package/dist/src/cli/utils/user-config.js +12 -0
  20. package/dist/src/config/ai-manager-hiring.js +121 -0
  21. package/dist/src/config/compat.js +16 -0
  22. package/dist/src/config/feature-flags.js +25 -0
  23. package/dist/src/config/persona-capability-bundles.js +273 -0
  24. package/dist/src/config/persona-hiring.js +270 -0
  25. package/dist/src/config/portfolio-slug-overrides.js +17 -0
  26. package/dist/src/config/pricing.js +37 -0
  27. package/dist/src/config/stripe.js +43 -0
  28. package/dist/src/core/fraim-config-schema.generated.js +8 -2
  29. package/dist/src/core/utils/local-registry-resolver.js +26 -0
  30. package/dist/src/core/utils/project-fraim-paths.js +89 -2
  31. package/dist/src/first-run/session-service.js +12 -3
  32. package/dist/src/local-mcp-server/artifact-retention-cleanup.js +255 -0
  33. package/dist/src/local-mcp-server/learning-context-builder.js +41 -81
  34. package/dist/src/local-mcp-server/stdio-server.js +42 -7
  35. package/package.json +5 -1
  36. package/public/ai-hub/index.html +205 -89
  37. package/public/ai-hub/review.css +12 -0
  38. package/public/ai-hub/script.js +1734 -253
  39. package/public/ai-hub/styles.css +473 -6
@@ -664,7 +664,7 @@ img.conv-employee-avatar {
664
664
 
665
665
  #active-conv {
666
666
  display: grid;
667
- grid-template-rows: auto auto minmax(0, 1fr) auto;
667
+ grid-template-rows: auto auto auto minmax(0, 1fr) auto;
668
668
  gap: 14px;
669
669
  min-width: 0;
670
670
  flex: 1;
@@ -826,6 +826,338 @@ img.conv-employee-avatar {
826
826
  .conversation-status > * {
827
827
  min-width: 0;
828
828
  }
829
+ .delegation-ledger {
830
+ display: block;
831
+ border: 1px solid var(--line);
832
+ background: var(--surface);
833
+ border-radius: 8px;
834
+ padding: 0;
835
+ overflow: hidden;
836
+ }
837
+ .delegation-ledger[hidden] {
838
+ display: none;
839
+ }
840
+ .manager-oversight-board {
841
+ display: block;
842
+ border: 1px solid var(--line);
843
+ background: color-mix(in srgb, var(--surface) 84%, var(--accent) 16%);
844
+ border-radius: 8px;
845
+ padding: 0;
846
+ overflow: hidden;
847
+ }
848
+ .manager-oversight-board[hidden] {
849
+ display: none;
850
+ }
851
+ .manager-oversight-board > summary {
852
+ padding: 12px;
853
+ }
854
+ .manager-oversight-board > summary::before {
855
+ margin-top: 2px;
856
+ }
857
+ .manager-oversight-header {
858
+ display: flex;
859
+ align-items: flex-start;
860
+ justify-content: space-between;
861
+ gap: 12px;
862
+ }
863
+ .manager-oversight-copy {
864
+ display: grid;
865
+ gap: 3px;
866
+ min-width: 0;
867
+ }
868
+ .manager-oversight-kicker {
869
+ font-size: 11px;
870
+ font-weight: 700;
871
+ letter-spacing: 0.12em;
872
+ text-transform: uppercase;
873
+ color: var(--muted);
874
+ }
875
+ .manager-oversight-copy strong {
876
+ font-size: 15px;
877
+ color: var(--text);
878
+ }
879
+ .manager-oversight-meta {
880
+ flex-shrink: 0;
881
+ font-size: 12px;
882
+ color: var(--muted);
883
+ }
884
+ .manager-oversight-list {
885
+ display: grid;
886
+ gap: 8px;
887
+ padding: 0 12px 12px;
888
+ }
889
+ .manager-plan-row {
890
+ display: grid;
891
+ grid-template-columns: 28px minmax(0, 1fr);
892
+ gap: 10px;
893
+ border: 1px solid var(--line);
894
+ background: var(--surface);
895
+ border-radius: 8px;
896
+ padding: 10px;
897
+ min-width: 0;
898
+ }
899
+ .manager-plan-step {
900
+ display: grid;
901
+ place-items: center;
902
+ width: 24px;
903
+ height: 24px;
904
+ border-radius: 999px;
905
+ background: color-mix(in srgb, var(--accent) 14%, var(--surface));
906
+ border: 1px solid color-mix(in srgb, var(--accent) 26%, var(--line));
907
+ color: var(--accent);
908
+ font-size: 12px;
909
+ font-weight: 800;
910
+ }
911
+ .manager-plan-body {
912
+ display: grid;
913
+ gap: 4px;
914
+ min-width: 0;
915
+ }
916
+ .manager-plan-top {
917
+ display: flex;
918
+ align-items: flex-start;
919
+ justify-content: space-between;
920
+ gap: 8px;
921
+ min-width: 0;
922
+ }
923
+ .manager-plan-top strong,
924
+ .manager-plan-empty strong {
925
+ font-size: 12px;
926
+ color: var(--text);
927
+ overflow-wrap: anywhere;
928
+ }
929
+ .manager-plan-status {
930
+ flex-shrink: 0;
931
+ border-radius: 999px;
932
+ padding: 2px 7px;
933
+ background: var(--soft);
934
+ border: 1px solid var(--line);
935
+ color: var(--muted);
936
+ font-size: 10px;
937
+ font-weight: 800;
938
+ text-transform: uppercase;
939
+ }
940
+ .manager-plan-status.status-running,
941
+ .manager-plan-status.status-submitted {
942
+ border-color: color-mix(in srgb, #0b63ce 28%, var(--line));
943
+ background: #e8f1ff;
944
+ color: #0b63ce;
945
+ }
946
+ .manager-plan-status.status-reviewed,
947
+ .manager-plan-status.status-completed {
948
+ border-color: color-mix(in srgb, #1c7c36 30%, var(--line));
949
+ background: #e9f7ee;
950
+ color: #1c7c36;
951
+ }
952
+ .manager-plan-status.status-blocked,
953
+ .manager-plan-status.status-failed {
954
+ border-color: color-mix(in srgb, #b3261e 28%, var(--line));
955
+ background: #fdecea;
956
+ color: #b3261e;
957
+ }
958
+ .manager-plan-meta,
959
+ .manager-plan-review,
960
+ .manager-plan-instructions,
961
+ .manager-plan-empty span {
962
+ font-size: 11px;
963
+ color: var(--muted);
964
+ overflow-wrap: anywhere;
965
+ }
966
+ .manager-plan-review {
967
+ color: var(--text);
968
+ }
969
+ .manager-plan-empty {
970
+ display: grid;
971
+ gap: 3px;
972
+ border: 1px dashed var(--line);
973
+ background: var(--surface);
974
+ border-radius: 8px;
975
+ padding: 10px;
976
+ min-width: 0;
977
+ }
978
+ .delegation-ledger > summary {
979
+ padding: 12px;
980
+ }
981
+ .delegation-ledger > summary::before {
982
+ margin-top: 2px;
983
+ }
984
+ .delegation-ledger-body {
985
+ padding: 0 12px 12px;
986
+ display: grid;
987
+ gap: 10px;
988
+ overflow-y: auto;
989
+ }
990
+ .delegation-ledger-header {
991
+ display: flex;
992
+ align-items: flex-start;
993
+ justify-content: space-between;
994
+ gap: 12px;
995
+ }
996
+ .delegation-ledger-copy {
997
+ display: grid;
998
+ gap: 3px;
999
+ min-width: 0;
1000
+ }
1001
+ .delegation-ledger-kicker {
1002
+ font-size: 11px;
1003
+ font-weight: 700;
1004
+ letter-spacing: 0.12em;
1005
+ text-transform: uppercase;
1006
+ color: var(--muted);
1007
+ }
1008
+ .delegation-ledger-copy strong {
1009
+ font-size: 15px;
1010
+ color: var(--text);
1011
+ }
1012
+ .delegation-ledger-meta {
1013
+ flex-shrink: 0;
1014
+ font-size: 12px;
1015
+ color: var(--muted);
1016
+ }
1017
+ .delegation-ledger-summary {
1018
+ margin: 0;
1019
+ font-size: 13px;
1020
+ color: var(--muted);
1021
+ line-height: 1.45;
1022
+ }
1023
+ .delegation-task-list {
1024
+ display: grid;
1025
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1026
+ gap: 8px;
1027
+ }
1028
+ .delegation-task {
1029
+ display: grid;
1030
+ gap: 6px;
1031
+ min-width: 0;
1032
+ border: 1px solid var(--line);
1033
+ border-radius: 8px;
1034
+ background: var(--soft);
1035
+ padding: 10px;
1036
+ }
1037
+ .delegation-task-top {
1038
+ display: flex;
1039
+ align-items: center;
1040
+ justify-content: space-between;
1041
+ gap: 8px;
1042
+ }
1043
+ .delegation-task-assignee {
1044
+ font-size: 12px;
1045
+ font-weight: 700;
1046
+ color: var(--accent-strong);
1047
+ }
1048
+ .delegation-task-status {
1049
+ display: inline-flex;
1050
+ align-items: center;
1051
+ justify-content: center;
1052
+ border-radius: 999px;
1053
+ padding: 3px 7px;
1054
+ font-size: 10px;
1055
+ font-weight: 800;
1056
+ text-transform: uppercase;
1057
+ background: var(--line);
1058
+ color: var(--muted);
1059
+ }
1060
+ .delegation-task-status.status-running,
1061
+ .delegation-task-status.status-submitted {
1062
+ background: var(--state-working-soft);
1063
+ color: var(--state-working);
1064
+ }
1065
+ .delegation-task-status.status-reviewed,
1066
+ .delegation-task-status.status-completed {
1067
+ background: var(--state-complete-soft);
1068
+ color: var(--state-complete);
1069
+ }
1070
+ .delegation-task-status.status-blocked,
1071
+ .delegation-task-status.status-failed {
1072
+ background: var(--state-waiting-soft);
1073
+ color: var(--state-waiting);
1074
+ }
1075
+ .delegation-task-title {
1076
+ min-width: 0;
1077
+ font-size: 14px;
1078
+ color: var(--text);
1079
+ }
1080
+ .delegation-task-detail {
1081
+ font-size: 12px;
1082
+ color: var(--muted);
1083
+ white-space: nowrap;
1084
+ overflow: hidden;
1085
+ text-overflow: ellipsis;
1086
+ }
1087
+ .delegation-task-summary {
1088
+ margin: 0;
1089
+ font-size: 13px;
1090
+ line-height: 1.45;
1091
+ color: var(--text);
1092
+ }
1093
+ .delegation-artifacts {
1094
+ display: flex;
1095
+ flex-wrap: wrap;
1096
+ gap: 6px;
1097
+ }
1098
+ .delegation-artifact,
1099
+ .delegation-review-note,
1100
+ .delegation-view-work {
1101
+ display: inline-flex;
1102
+ width: fit-content;
1103
+ max-width: 100%;
1104
+ border-radius: 999px;
1105
+ padding: 4px 8px;
1106
+ font-size: 11px;
1107
+ font-weight: 700;
1108
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
1109
+ color: var(--accent-strong);
1110
+ }
1111
+ .delegation-artifact {
1112
+ border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line));
1113
+ cursor: pointer;
1114
+ }
1115
+ .delegation-artifact:hover {
1116
+ background: color-mix(in srgb, var(--accent) 16%, transparent);
1117
+ }
1118
+ .delegation-review-note {
1119
+ background: var(--state-working-soft);
1120
+ color: var(--state-working);
1121
+ }
1122
+ .delegation-view-work {
1123
+ border: 1px solid var(--line);
1124
+ cursor: pointer;
1125
+ background: var(--surface);
1126
+ color: var(--text);
1127
+ }
1128
+ .delegation-view-work:hover {
1129
+ border-color: var(--accent);
1130
+ color: var(--accent-strong);
1131
+ }
1132
+ .coach-panel--managed-readonly {
1133
+ border-color: var(--line);
1134
+ }
1135
+ .coach-panel--managed-readonly textarea {
1136
+ background: var(--soft);
1137
+ color: var(--muted);
1138
+ }
1139
+ .managed-disabled {
1140
+ opacity: 0.55;
1141
+ cursor: not-allowed;
1142
+ }
1143
+ .conv-delegated-list {
1144
+ display: grid;
1145
+ gap: 6px;
1146
+ margin: 6px 0 10px 20px;
1147
+ padding-left: 10px;
1148
+ border-left: 1px solid var(--line);
1149
+ }
1150
+ .conv-delegated-label {
1151
+ font-size: 10px;
1152
+ font-weight: 800;
1153
+ letter-spacing: 0.08em;
1154
+ text-transform: uppercase;
1155
+ color: var(--muted);
1156
+ }
1157
+ .conv-item--delegated-child {
1158
+ background: var(--surface);
1159
+ border-color: color-mix(in srgb, var(--accent) 14%, var(--line));
1160
+ }
829
1161
  .status-stack {
830
1162
  display: grid;
831
1163
  gap: 10px;
@@ -2487,12 +2819,58 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
2487
2819
  .proj-context-top { flex-shrink: 0; padding: 12px 16px 0; overflow-y: auto; max-height: 46vh; }
2488
2820
  /* #521: shared empty/CTA block — used by BOTH the Brief and Learnings sections so
2489
2821
  they look consistent (a left-aligned message, optional note, primary button). */
2490
- .ctx-cta { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; padding: 18px 16px; }
2491
- .ctx-cta-msg { font-size: 13px; color: var(--muted); line-height: 1.6; max-width: 520px; }
2822
+ .ctx-cta { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; padding: 18px 16px; }
2823
+ .ctx-cta-ico { font-size: 26px; line-height: 1; }
2824
+ .ctx-cta-title { font-size: 14px; font-weight: 600; color: var(--text, #1a1a1a); margin: 0; }
2825
+ .ctx-cta-msg { font-size: 13px; color: var(--muted); line-height: 1.6; max-width: 520px; margin: 0; }
2492
2826
  .ctx-cta-note { font-size: 12px; color: var(--text); line-height: 1.5; max-width: 520px; padding: 8px 12px; background: var(--soft, #f6f6f6); border: 1px solid var(--line, #e6e6e6); border-radius: 8px; }
2493
2827
  .ctx-cta-btn { font-size: 14px; font-weight: 600; color: #fff; background: var(--accent, #1f6feb); border: none; border-radius: 8px; padding: 10px 16px; cursor: pointer; }
2494
2828
  .ctx-cta-btn:hover { filter: brightness(1.05); }
2829
+ .ctx-push-auto { font-size: 11px; color: var(--muted); opacity: .7; white-space: nowrap; }
2830
+ /* Unified Company/Manager area layout: info view (accordions) vs conversation panel */
2831
+ .area-info-view { flex: 1; overflow-y: auto; min-height: 0; }
2832
+ /* Shared conversation host — a workspace-conv slot inside Company/Manager .area-main.
2833
+ The .page element is physically moved here when a company/manager job is active,
2834
+ inheriting all .workspace-conv CSS rules (header hidden, rail hidden, conv fills space). */
2835
+ .area-conv-host { flex: 1; overflow: hidden; min-height: 0; }
2836
+ /* Rail "info" nav button — mirrors the "Project Info" entry in the Projects tree sidebar */
2837
+ .area-rail-info-btn {
2838
+ display: flex; align-items: center; gap: 8px;
2839
+ width: 100%; padding: 9px 16px;
2840
+ font-size: 13px; font-weight: 600; color: var(--text);
2841
+ background: none; border: none; border-bottom: 1px solid var(--line);
2842
+ text-align: left; cursor: pointer; margin-bottom: 2px;
2843
+ }
2844
+ .area-rail-info-btn:hover { background: var(--bg); }
2845
+ .area-rail-info-btn.info-active { color: var(--accent); background: var(--accent-soft); }
2846
+ /* #594 R2: area-level conversation panel (Company/Manager tab inline run view) — kept for reference */
2847
+ .area-page-conv { display: flex; flex-direction: column; gap: 0; margin: 0 0 20px; background: var(--card, #fff); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
2848
+ .area-conv-topline { display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--line); }
2849
+ .area-conv-thread { flex: 1; max-height: 340px; overflow-y: auto; padding: 14px 16px; display: flex; flex-direction: column; gap: 10px; }
2850
+ .area-conv-empty { font-size: 13px; color: var(--muted); margin: 0; }
2851
+ .area-conv-msg { display: flex; flex-direction: column; gap: 2px; }
2852
+ .area-conv-msg--manager .area-conv-msg-text { align-self: flex-end; background: var(--accent-soft, #eef4ff); border-radius: 10px 10px 2px 10px; padding: 8px 12px; font-size: 13px; color: var(--text); max-width: 80%; margin: 0; }
2853
+ .area-conv-msg--employee .area-conv-msg-text { align-self: flex-start; background: var(--surface, #f8f8f8); border: 1px solid var(--line); border-radius: 10px 10px 10px 2px; padding: 8px 12px; font-size: 13px; color: var(--text); max-width: 80%; margin: 0; white-space: pre-wrap; }
2854
+ .area-conv-coach { display: flex; align-items: flex-end; gap: 8px; padding: 10px 14px; border-top: 1px solid var(--line); background: var(--bg, #fafafa); }
2855
+ .area-conv-coach-ta { flex: 1; resize: none; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; font-size: 13px; font-family: inherit; color: var(--text); background: var(--card, #fff); outline: none; min-height: 38px; }
2856
+ .area-conv-coach-ta:focus { border-color: var(--accent); }
2857
+ .area-conv-coach-send { flex-shrink: 0; font-size: 13px; font-weight: 600; color: #fff; background: var(--accent, #0071e3); border: none; border-radius: 8px; padding: 8px 16px; cursor: pointer; height: 38px; }
2858
+ .area-conv-coach-send:hover { filter: brightness(1.08); }
2495
2859
  .ctx-loading { font-size: 13px; color: var(--muted); padding: 10px 4px; }
2860
+ .ctx-push-bar { display: flex; align-items: center; gap: 10px; padding: 9px 14px; margin-top: 6px; background: var(--accent-soft, #eef4ff); border: 1px solid var(--line); border-radius: 8px; }
2861
+ .ctx-push-msg { flex: 1; font-size: 13px; color: var(--text); }
2862
+ .ctx-push-btn { font-size: 13px; font-weight: 600; color: #fff; background: var(--accent, #0071e3); border: none; border-radius: 6px; padding: 6px 14px; cursor: pointer; white-space: nowrap; }
2863
+ .ctx-push-btn:hover { filter: brightness(1.07); }
2864
+ .ctx-push-dismiss { font-size: 12.5px; color: var(--muted); background: none; border: 1px solid var(--line, rgba(0,0,0,.1)); border-radius: 5px; padding: 4px 10px; cursor: pointer; white-space: nowrap; }
2865
+ .ctx-push-dismiss:hover { color: var(--text); border-color: var(--muted); }
2866
+ .push-to-team-banner { display: flex; align-items: flex-start; gap: 12px; padding: 14px 16px; margin: 10px 0; background: var(--accent-soft, #eef4ff); border: 1px solid var(--line); border-radius: 10px; }
2867
+ .ptb-ico { font-size: 20px; flex-shrink: 0; line-height: 1.4; }
2868
+ .ptb-copy { flex: 1; font-size: 13px; color: var(--text); line-height: 1.6; }
2869
+ .ptb-copy strong { font-weight: 600; }
2870
+ .ptb-push-btn { font-size: 13px; font-weight: 600; color: #fff; background: var(--accent, #0071e3); border: none; border-radius: 8px; padding: 8px 16px; cursor: pointer; white-space: nowrap; flex-shrink: 0; }
2871
+ .ptb-push-btn:hover { filter: brightness(1.07); }
2872
+ .ptb-dismiss { font-size: 13px; color: var(--muted); background: none; border: 1px solid var(--line, rgba(0,0,0,.1)); border-radius: 6px; padding: 6px 12px; cursor: pointer; white-space: nowrap; flex-shrink: 0; }
2873
+ .ptb-dismiss:hover { color: var(--text); border-color: var(--muted); }
2496
2874
  /* #521: project-onboarding input modal (manager's direction before a run). */
2497
2875
  .obi-input { width: 100%; box-sizing: border-box; resize: vertical; min-height: 96px; font: inherit; font-size: 14px; line-height: 1.5; padding: 11px 13px; border: 1px solid var(--line, #e2e2e2); border-radius: 10px; background: var(--surface, #fff); color: var(--ink, #1a1a1a); }
2498
2876
  .obi-input:focus { outline: none; border-color: var(--accent, #1f6feb); }
@@ -2772,6 +3150,33 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
2772
3150
  max-height: clamp(120px, 24vh, 260px);
2773
3151
  overflow-y: auto;
2774
3152
  }
3153
+
3154
+ .workspace-conv #active-conv.has-delegation-board .delegation-ledger[open] .delegation-ledger-body {
3155
+ max-height: clamp(140px, 24vh, 260px);
3156
+ }
3157
+ .workspace-conv #active-conv.has-manager-oversight .manager-oversight-board[open] .manager-oversight-list {
3158
+ max-height: clamp(120px, 22vh, 240px);
3159
+ overflow-y: auto;
3160
+ }
3161
+ .workspace-conv #active-conv.has-delegation-board .progress,
3162
+ .workspace-conv #active-conv.has-manager-oversight .progress {
3163
+ max-height: 68px;
3164
+ overflow: hidden;
3165
+ }
3166
+ .workspace-conv #active-conv.has-delegation-board #coach-panel[open] .panel-body,
3167
+ .workspace-conv #active-conv.has-manager-oversight #coach-panel[open] .panel-body {
3168
+ max-height: clamp(120px, 18vh, 240px);
3169
+ overflow-y: auto;
3170
+ }
3171
+ .workspace-conv #active-conv.has-delegation-board .support-stack,
3172
+ .workspace-conv #active-conv.has-manager-oversight .support-stack {
3173
+ flex: 0 0 auto;
3174
+ max-height: none;
3175
+ overflow-y: visible;
3176
+ }
3177
+ .workspace-conv #active-conv.has-manager-oversight {
3178
+ gap: 6px;
3179
+ }
2775
3180
  .workspace-conv .support-stack > .panel-details,
2776
3181
  .workspace-conv .support-stack > .micro { margin-bottom: 0; }
2777
3182
 
@@ -2844,6 +3249,13 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
2844
3249
  .workspace-conv .layout {
2845
3250
  min-width: 0;
2846
3251
  }
3252
+ .manager-oversight-header {
3253
+ display: grid;
3254
+ gap: 4px;
3255
+ }
3256
+ .manager-oversight-meta {
3257
+ flex-shrink: 1;
3258
+ }
2847
3259
  }
2848
3260
 
2849
3261
  /* Review surfaces */
@@ -2874,6 +3286,8 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
2874
3286
  .modal-body { padding: 18px 22px; display: flex; flex-direction: column; gap: 14px; }
2875
3287
  .modal-close { float: right; background: var(--bg); border: none; width: 28px; height: 28px; border-radius: 50%; font-size: 16px; cursor: pointer; color: var(--muted); line-height: 1; }
2876
3288
  .modal-close:hover { color: var(--text); }
3289
+ .aom-cancel-btn { background: none; border: 1px solid var(--line); border-radius: 20px; padding: 9px 20px; font-size: 14px; cursor: pointer; color: var(--muted); }
3290
+ .aom-cancel-btn:hover { color: var(--text); }
2877
3291
  .modal-footer { padding: 12px 22px 20px; display: flex; align-items: center; justify-content: space-between; }
2878
3292
  .modal-next { padding: 9px 22px; background: var(--text); color: #fff; border: none; border-radius: 20px; font-size: 14px; font-weight: 600; cursor: pointer; }
2879
3293
  .modal-back { font-size: 13px; color: var(--muted); background: none; border: none; cursor: pointer; }
@@ -3859,11 +4273,12 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
3859
4273
  .hm-fieldrow { display: flex; gap: 10px; }
3860
4274
  .hm-fieldrow .hm-field { flex: 1; }
3861
4275
  .hm-field label { display: block; font-size: 12px; font-weight: 600; color: var(--muted); margin-bottom: 5px; }
3862
- .hm-field select, .hm-field input {
4276
+ .hm-field select, .hm-field input, .hm-field textarea {
3863
4277
  width: 100%; border: 1px solid var(--line); border-radius: 9px; padding: 9px 12px;
3864
4278
  font: inherit; font-size: 13px; background: var(--bg); color: var(--text);
3865
4279
  }
3866
- .hm-field select:focus, .hm-field input:focus { outline: 2px solid var(--accent); border-color: transparent; }
4280
+ .hm-field textarea { resize: vertical; min-height: 60px; }
4281
+ .hm-field select:focus, .hm-field input:focus, .hm-field textarea:focus { outline: 2px solid var(--accent); border-color: transparent; }
3867
4282
  .hm-query { display: flex; align-items: flex-start; gap: 10px; background: var(--bg); border: 1px solid var(--line); border-radius: 9px; padding: 10px 12px; }
3868
4283
  .hm-query code { flex: 1; font-family: ui-monospace, "SF Mono", "JetBrains Mono", monospace; font-size: 12px; line-height: 1.55; color: var(--text); white-space: pre-wrap; word-break: break-word; }
3869
4284
  .hm-copy-btn { flex-shrink: 0; font-size: 12px; font-weight: 600; color: var(--accent); background: none; border: 1px solid var(--line); border-radius: 7px; padding: 4px 10px; cursor: pointer; }
@@ -3940,7 +4355,6 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
3940
4355
  .prt-hire-btn { font-size:11px; font-weight:700; color:#fff; background:var(--accent,#0071e3); border:none; border-radius:6px; padding:4px 12px; cursor:pointer; margin-top:2px; }
3941
4356
  .prt-hire-btn:hover { background:var(--accent-hover,#005bbf); }
3942
4357
  .prt-price { font-size:10px; color:var(--sub); margin-top:1px; }
3943
- .manager-team-section { padding:4px 0 16px; }
3944
4358
  .manager-no-team-msg { font-size:13px; color:var(--sub); margin:0 0 10px; }
3945
4359
  .manager-go-company-btn { font-size:12px; font-weight:600; color:var(--accent,#0071e3); background:var(--accent-soft,rgba(0,113,227,.08)); border:1px solid var(--accent,#0071e3); border-radius:6px; padding:5px 13px; cursor:pointer; }
3946
4360
  .manager-go-company-btn:hover { background:var(--accent-soft,rgba(0,113,227,.15)); }
@@ -3993,3 +4407,56 @@ body.hub-shell { display: flex; flex-direction: column; height: 100vh; overflow:
3993
4407
  .hs-btn--primary:hover { opacity:.85; }
3994
4408
  .hs-btn--ghost { background:transparent; color:var(--muted); border:1px solid var(--line); }
3995
4409
  .hs-btn--ghost:hover { color:var(--text); border-color:var(--text); }
4410
+
4411
+ /* ── Issue #578: Scheduled + Reactive Employees ── */
4412
+
4413
+ /* sourceTrigger chip on run rail items */
4414
+ .trigger-badge { display:inline-block; padding:1px 6px; border-radius:4px; font-size:10px; font-weight:600; letter-spacing:.02em; flex-shrink:0; }
4415
+ .trigger-badge--scheduled { background:rgba(0,122,255,.12); color:#0071e3; }
4416
+ .trigger-badge--webhook { background:rgba(88,86,214,.12); color:#5856d6; }
4417
+
4418
+ /* Deployment roster accordion */
4419
+ #proj-deployments-acc { margin-top:0; }
4420
+ .dep-actions { display:flex; gap:8px; margin-top:8px; }
4421
+ .dep-add-btn { padding:4px 12px; background:var(--accent-soft,rgba(0,113,227,.08)); color:var(--accent,#0071e3); border:1px solid rgba(0,113,227,.2); border-radius:8px; font-size:12px; font-weight:600; cursor:pointer; }
4422
+ .dep-add-btn:hover { background:var(--accent,#0071e3); color:#fff; }
4423
+
4424
+ /* Deployment cards */
4425
+ .dep-card { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px; padding:8px 10px; background:var(--surface,#fff); border:1px solid var(--line,#e5e5e5); border-radius:10px; margin-bottom:6px; }
4426
+ .dep-card-top { display:flex; align-items:center; gap:6px; flex:1; min-width:0; }
4427
+ .dep-type-icon { font-size:14px; flex-shrink:0; }
4428
+ .dep-label { font-size:13px; font-weight:600; color:var(--text,#1d1d1f); flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
4429
+ .dep-type-badge { display:inline-block; padding:1px 7px; border-radius:4px; font-size:10px; font-weight:600; flex-shrink:0; }
4430
+ .dep-type-badge--scheduled { background:rgba(0,122,255,.12); color:#0071e3; }
4431
+ .dep-type-badge--webhook { background:rgba(88,86,214,.12); color:#5856d6; }
4432
+ .dep-detail { width:100%; font-size:11px; color:var(--muted,#888); margin-left:20px; }
4433
+ .dep-detail--url { display:flex; align-items:center; gap:6px; }
4434
+ .dep-inbound-url { font-size:11px; word-break:break-all; color:var(--muted,#888); flex:1; }
4435
+ .dep-inbound-url--inline { display:inline; font-size:11px; }
4436
+ /* Assignment modals — redesigned */
4437
+ .dep-modal-card { max-width:540px; }
4438
+ .dep-modal-card .modal-hdr p { font-size:12px; color:var(--muted,#888); margin:3px 0 0; font-weight:400; }
4439
+ .dep-optional { font-weight:400; font-size:11px; color:var(--muted,#888); }
4440
+ .dep-preset-chips { display:flex; gap:8px; flex-wrap:wrap; margin-top:2px; }
4441
+ .dep-preset-chip { padding:6px 18px; border-radius:20px; font-size:13px; font-weight:500; border:1.5px solid var(--line,#e5e5e5); background:var(--bg,#f5f5f7); color:var(--muted,#888); cursor:pointer; transition:border-color .12s, color .12s, background .12s; }
4442
+ .dep-preset-chip:hover { border-color:var(--accent,#0071e3); color:var(--accent,#0071e3); }
4443
+ .dep-preset-chip.active { background:var(--accent,#0071e3); border-color:var(--accent,#0071e3); color:#fff; }
4444
+ .dep-wh-inbound-reveal { margin-top:16px; padding-top:16px; border-top:1px solid var(--line,#e5e5e5); }
4445
+ .dep-wh-inbound-header { margin-bottom:8px; }
4446
+ .dep-wh-inbound-label { font-size:12px; font-weight:600; color:var(--text,#1d1d1f); display:block; }
4447
+ .dep-wh-inbound-hint { font-size:11px; color:var(--muted,#888); display:block; margin-top:2px; }
4448
+ .dep-card-actions { display:flex; gap:6px; margin-left:auto; align-items:center; flex-shrink:0; }
4449
+ .dep-edit-btn { padding:2px 8px; background:transparent; border:1px solid var(--line,#e5e5e5); border-radius:6px; font-size:11px; color:var(--muted,#888); cursor:pointer; }
4450
+ .dep-edit-btn:hover { border-color:var(--accent,#0071e3); color:var(--accent,#0071e3); }
4451
+ .dep-del-btn { padding:2px 8px; background:transparent; border:1px solid var(--line,#e5e5e5); border-radius:6px; font-size:11px; color:var(--muted,#888); cursor:pointer; }
4452
+ .dep-del-btn:hover { border-color:#ff3b30; color:#ff3b30; }
4453
+ .dep-detail--emp { font-style:normal; }
4454
+ .dep-empty { color:var(--muted,#888); font-size:12px; margin:4px 0 8px; line-height:1.5; }
4455
+ .dep-cron-preview { font-size:11px; color:var(--accent,#0071e3); margin:2px 0 0; }
4456
+
4457
+ /* Deployment modals */
4458
+ .dep-modal-actions { display:flex; gap:8px; margin-top:12px; }
4459
+ .dep-error { color:#ff3b30; font-size:12px; margin-top:4px; }
4460
+ .cancel-button { padding:7px 18px; border-radius:8px; font-size:13px; font-weight:600; cursor:pointer; background:transparent; color:var(--muted,#888); border:1px solid var(--line,#e5e5e5); }
4461
+ .cancel-button:hover { border-color:var(--text,#1d1d1f); color:var(--text,#1d1d1f); }
4462
+ .dep-inbound-url-row { display:flex; align-items:center; gap:8px; padding:6px 10px; background:var(--bg,#f5f5f7); border-radius:8px; margin-top:6px; }