codebee 0.1.5 → 0.1.6
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/CHANGELOG.md +8 -0
- package/README.md +4 -5
- package/app/core/health.py +55 -1
- package/app/core/jobs.py +10 -2
- package/app/core/manager.py +9 -1
- package/app/core/modelhub.py +66 -15
- package/app/core/pipeline.py +126 -60
- package/app/core/registry.py +4 -0
- package/app/core/router.py +5 -4
- package/app/core/runner.py +12 -3
- package/app/core/selfupdate.py +7 -1
- package/app/ui/app.js +168 -66
- package/app/ui/i18n.js +13 -5
- package/app/ui/icons/bee.svg +79 -0
- package/app/ui/index.html +2 -1
- package/app/ui/style.css +189 -342
- package/package.json +1 -1
package/app/ui/style.css
CHANGED
|
@@ -2966,141 +2966,195 @@ span.imgcap { cursor: pointer; user-select: none; }
|
|
|
2966
2966
|
span.imgcap:not(.ok) { opacity: .45; }
|
|
2967
2967
|
span.imgcap:hover { border-color: var(--accent); color: var(--accent); }
|
|
2968
2968
|
|
|
2969
|
-
/* ================= 蜂巢工作台视觉
|
|
2970
|
-
*
|
|
2971
|
-
*
|
|
2972
|
-
*
|
|
2973
|
-
*
|
|
2969
|
+
/* ================= 蜂巢工作台视觉 v8(归行·蜂航) =================
|
|
2970
|
+
* 用户拍板:横向流程图不如原始的行排——布局回归纵向泳道行(容器横向布局、
|
|
2971
|
+
* 交错、双列芯片全部撤掉,行内角色/执行者/尾巴/计时全量展示交还基座),
|
|
2972
|
+
* 保留随肤精修:面板底泳道+顶部强调轨+六边形站序徽章+状态渐隐顶带+蜜光呼吸。
|
|
2973
|
+
* 行与行之间是纵向蜜线航线,活跃段的蜜蜂沿弧线俯冲向下一行(offset-path)。
|
|
2974
2974
|
* 动画名(lane-in/cell-in/hc-breathe/bee-bob/flow-dot/ld-in)与 --d 级联不变——测试契约。 */
|
|
2975
2975
|
|
|
2976
|
-
/*
|
|
2977
|
-
.rd-hive .sec-title {
|
|
2976
|
+
/* 区标题:正式无衬线,强调色只留给图标 */
|
|
2977
|
+
.rd-hive .sec-title { letter-spacing: .02em; }
|
|
2978
2978
|
.rd-hive .sec-title .ico { color: var(--accent); }
|
|
2979
|
-
.rd-hive .sec-title > span:not(.tag) {
|
|
2979
|
+
.rd-hive .sec-title > span:not(.tag) { font-weight: 700; }
|
|
2980
2980
|
|
|
2981
|
-
/*
|
|
2981
|
+
/* —— 泳道行:面板底 + 顶部悬浮强调轨(活跃轨呼吸),布局交还基座 —— */
|
|
2982
2982
|
.hive-lane {
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2983
|
+
position: relative;
|
|
2984
|
+
border-radius: 12px; padding: 10px 12px;
|
|
2985
|
+
background: linear-gradient(180deg,
|
|
2986
|
+
color-mix(in srgb, var(--accent) 3%, var(--panel)), var(--panel) 58%);
|
|
2987
|
+
}
|
|
2988
|
+
.hive-lane::before {
|
|
2989
|
+
content: ""; position: absolute; top: 0; left: 16px; right: 16px; height: 2px;
|
|
2990
|
+
border-radius: 2px; pointer-events: none;
|
|
2991
|
+
background: linear-gradient(90deg,
|
|
2992
|
+
color-mix(in srgb, var(--accent) 40%, transparent), transparent 78%);
|
|
2993
|
+
opacity: .5;
|
|
2988
2994
|
}
|
|
2989
2995
|
.hive-lane.lane-active {
|
|
2990
|
-
border-color: color-mix(in srgb, var(--accent)
|
|
2991
|
-
box-shadow:
|
|
2996
|
+
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
2997
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 14%, transparent),
|
|
2998
|
+
0 8px 22px color-mix(in srgb, var(--accent) 9%, transparent);
|
|
2992
2999
|
}
|
|
2993
|
-
.hive-lane.lane-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
text-shadow: 2px 2px 0 color-mix(in srgb, var(--accent) 22%, transparent);
|
|
3000
|
+
.hive-lane.lane-active::before {
|
|
3001
|
+
background: linear-gradient(90deg, var(--accent),
|
|
3002
|
+
color-mix(in srgb, var(--accent) 45%, transparent) 62%, transparent);
|
|
3003
|
+
opacity: .9;
|
|
2998
3004
|
}
|
|
2999
|
-
|
|
3000
|
-
.lane-
|
|
3001
|
-
|
|
3002
|
-
/* 站序徽章:金底黑字硬方块(像素字块),自带错位回声 */
|
|
3003
|
-
.lane-idx {
|
|
3004
|
-
background: var(--accent); color: var(--log-bg);
|
|
3005
|
-
border: none; border-radius: 0; padding: 3px 5px;
|
|
3006
|
-
font: 700 10px/1 var(--mono); letter-spacing: .1em; flex: none;
|
|
3007
|
-
box-shadow: 2px 2px 0 0 color-mix(in srgb, var(--accent) 38%, transparent);
|
|
3005
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3006
|
+
.hive-lane.lane-active::before { animation: lane-rail 2.6s ease-in-out infinite; }
|
|
3008
3007
|
}
|
|
3008
|
+
@keyframes lane-rail { 50% { opacity: .4; } }
|
|
3009
3009
|
|
|
3010
|
-
/*
|
|
3011
|
-
.lane-
|
|
3012
|
-
.lane-
|
|
3013
|
-
|
|
3014
|
-
|
|
3010
|
+
/* 泳道头:六边形站序徽章 + 名称 + 读数;「进行中」胶囊靠右 */
|
|
3011
|
+
.lane-head { flex-wrap: wrap; gap: 5px 8px; margin-bottom: 7px; }
|
|
3012
|
+
.lane-name {
|
|
3013
|
+
min-width: 0; font-weight: 700; letter-spacing: .01em;
|
|
3014
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
3015
3015
|
}
|
|
3016
|
-
.
|
|
3017
|
-
|
|
3018
|
-
|
|
3016
|
+
.lane-n { font-family: var(--mono); flex: none; }
|
|
3017
|
+
.lane-prog {
|
|
3018
|
+
font-family: var(--mono); font-size: 10.5px; color: var(--muted);
|
|
3019
|
+
border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; line-height: 15px;
|
|
3019
3020
|
}
|
|
3020
|
-
.
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3021
|
+
.lane-idx {
|
|
3022
|
+
width: 30px; height: 26px; display: inline-flex; align-items: center; justify-content: center;
|
|
3023
|
+
background: color-mix(in srgb, var(--accent) 14%, var(--panel)); color: var(--accent);
|
|
3024
|
+
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
|
|
3025
|
+
border: none; border-radius: 0; padding: 0;
|
|
3026
|
+
font: 700 10px/1 var(--mono); letter-spacing: .06em; flex: none;
|
|
3027
|
+
}
|
|
3028
|
+
.hive-lane .lane-live {
|
|
3029
|
+
border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
|
|
3030
|
+
border-radius: 999px; padding: 0 7px; line-height: 16px; font-size: 10.5px;
|
|
3031
|
+
background: color-mix(in srgb, var(--accent) 9%, transparent);
|
|
3028
3032
|
}
|
|
3029
3033
|
|
|
3030
|
-
/*
|
|
3031
|
-
.
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 14%, transparent);
|
|
3036
|
-
color: var(--log-text);
|
|
3037
|
-
}
|
|
3038
|
-
.hive-cell:hover {
|
|
3039
|
-
transform: translate(2px, 2px);
|
|
3040
|
-
box-shadow: 0 0 0 0 transparent;
|
|
3041
|
-
border-color: color-mix(in srgb, var(--accent) 62%, transparent);
|
|
3034
|
+
/* 轨道:细连线铺底,圆点 position 抬到线上方(连线不穿过点) */
|
|
3035
|
+
.lane-track { position: relative; margin: 1px 0 8px; }
|
|
3036
|
+
.lane-track::before {
|
|
3037
|
+
content: ""; position: absolute; left: 5px; right: 5px; top: 50%; height: 1px;
|
|
3038
|
+
background: var(--border);
|
|
3042
3039
|
}
|
|
3043
|
-
|
|
3040
|
+
.ld { position: relative; }
|
|
3041
|
+
|
|
3042
|
+
/* 卡片:皮肤面板底 + 状态渐隐顶带;悬停轻抬 + 柔和强调影(不做街机按压) */
|
|
3044
3043
|
.hive-cell::before {
|
|
3045
3044
|
content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
|
|
3046
|
-
border-radius: 0;
|
|
3045
|
+
border-radius: 10px 10px 0 0; pointer-events: none;
|
|
3046
|
+
background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 25%, transparent));
|
|
3047
|
+
opacity: .9;
|
|
3047
3048
|
}
|
|
3048
|
-
.hive-cell.st-running::before {
|
|
3049
|
-
background: linear-gradient(90deg, var(--accent) 0 55%, var(--accent2) 55% 100%); }
|
|
3050
3049
|
.hive-cell.st-done::before {
|
|
3051
|
-
background: linear-gradient(90deg, var(--ok)
|
|
3052
|
-
|
|
3050
|
+
background: linear-gradient(90deg, var(--ok), color-mix(in srgb, var(--ok) 25%, transparent));
|
|
3051
|
+
}
|
|
3053
3052
|
.hive-cell.st-failed::before {
|
|
3054
|
-
background: linear-gradient(90deg, var(--bad, #e5484d)
|
|
3055
|
-
color-mix(in srgb, var(--bad, #e5484d)
|
|
3053
|
+
background: linear-gradient(90deg, var(--bad, #e5484d),
|
|
3054
|
+
color-mix(in srgb, var(--bad, #e5484d) 25%, transparent));
|
|
3055
|
+
}
|
|
3056
3056
|
.hive-cell.st-timeout::before {
|
|
3057
|
-
background: linear-gradient(90deg, var(--accent2
|
|
3057
|
+
background: linear-gradient(90deg, var(--accent2, var(--warn)), transparent);
|
|
3058
|
+
}
|
|
3058
3059
|
.hive-cell.st-cancelled::before {
|
|
3059
|
-
background: linear-gradient(90deg, var(--warn)
|
|
3060
|
-
|
|
3061
|
-
.
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3060
|
+
background: linear-gradient(90deg, var(--warn, #d97706), transparent);
|
|
3061
|
+
}
|
|
3062
|
+
.hive-cell.st-running {
|
|
3063
|
+
background: linear-gradient(180deg,
|
|
3064
|
+
color-mix(in srgb, var(--accent) 5%, var(--panel)), var(--panel) 72%);
|
|
3065
|
+
border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
|
|
3066
|
+
}
|
|
3067
|
+
.hive-cell:hover {
|
|
3068
|
+
transform: translateY(-2px);
|
|
3069
|
+
box-shadow: 0 6px 16px color-mix(in srgb, var(--accent) 15%, transparent),
|
|
3070
|
+
0 1px 3px color-mix(in srgb, var(--text) 10%, transparent);
|
|
3069
3071
|
}
|
|
3070
|
-
.hive-cell.st-done { opacity: .78; }
|
|
3071
3072
|
|
|
3072
|
-
/*
|
|
3073
|
+
/* 呼吸重定义:细环 + 环境蜜光一涨一收(动画名不变,测试契约) */
|
|
3073
3074
|
@keyframes hc-breathe {
|
|
3074
|
-
0%, 100% {
|
|
3075
|
-
border-color: color-mix(in srgb, var(--accent) 28%, transparent);
|
|
3076
|
-
box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 14%, transparent);
|
|
3077
|
-
}
|
|
3075
|
+
0%, 100% { box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 22%, transparent); }
|
|
3078
3076
|
50% {
|
|
3079
|
-
|
|
3080
|
-
|
|
3077
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 48%, transparent),
|
|
3078
|
+
0 4px 18px color-mix(in srgb, var(--accent) 16%, transparent);
|
|
3081
3079
|
}
|
|
3082
3080
|
}
|
|
3083
|
-
.hive-cell.st-running {
|
|
3084
|
-
border-color: color-mix(in srgb, var(--accent) 45%, transparent);
|
|
3085
|
-
box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 20%, transparent);
|
|
3086
|
-
}
|
|
3087
3081
|
|
|
3088
|
-
/*
|
|
3089
|
-
.
|
|
3090
|
-
|
|
3091
|
-
background: var(--
|
|
3092
|
-
|
|
3093
|
-
|
|
3082
|
+
/* 文本:正式无衬线标题;尾巴保持 mono(日志语义)收进软底胶囊 */
|
|
3083
|
+
.hc-role { font-size: 12.5px; letter-spacing: .01em; }
|
|
3084
|
+
.hc-tail {
|
|
3085
|
+
background: color-mix(in srgb, var(--text) 4%, transparent);
|
|
3086
|
+
border-radius: 6px; padding: 3px 7px; margin-top: 6px;
|
|
3087
|
+
color: color-mix(in srgb, var(--text) 76%, var(--muted));
|
|
3088
|
+
}
|
|
3089
|
+
.hive-cell .hc-live {
|
|
3090
|
+
background: color-mix(in srgb, var(--accent) 9%, transparent);
|
|
3094
3091
|
}
|
|
3095
3092
|
|
|
3096
|
-
/*
|
|
3097
|
-
.
|
|
3093
|
+
/* —— 行间航线:纵向蜜线 + 箭尖;活跃段的蜜蜂俯冲向下一行 —— */
|
|
3094
|
+
.lane-flow {
|
|
3095
|
+
position: relative; height: 44px; width: 36px;
|
|
3096
|
+
margin: 2px 0 2px 10px;
|
|
3097
|
+
}
|
|
3098
|
+
.lane-flow::before { display: none; } /* 直线虚线由 SVG 蜜线替代 */
|
|
3099
|
+
.flow-line { position: absolute; inset: 0; width: 100%; height: 100%; }
|
|
3100
|
+
.flow-line-up { display: none; } /* 行排恒为下行线 */
|
|
3101
|
+
.flow-line .flow-path {
|
|
3102
|
+
fill: none; stroke: var(--border-strong); stroke-width: 1.5;
|
|
3103
|
+
stroke-dasharray: 5 6; stroke-linecap: round;
|
|
3104
|
+
}
|
|
3105
|
+
.flow-line .flow-tip {
|
|
3106
|
+
fill: none; stroke: var(--border-strong); stroke-width: 1.5;
|
|
3107
|
+
stroke-linecap: round; stroke-linejoin: round; opacity: .65;
|
|
3108
|
+
}
|
|
3109
|
+
.hive-lane.lane-active + .lane-flow .flow-path,
|
|
3110
|
+
.hive-lane.lane-active + .lane-flow .flow-tip {
|
|
3111
|
+
stroke: color-mix(in srgb, var(--accent) 62%, var(--border-strong));
|
|
3112
|
+
}
|
|
3113
|
+
.hive-lane.lane-active + .lane-flow .flow-tip { opacity: .95; }
|
|
3114
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3115
|
+
.hive-lane.lane-active + .lane-flow .flow-path { animation: lane-dash 1.2s linear infinite; }
|
|
3116
|
+
.hive-lane.lane-active + .lane-flow .flow-bee { animation: bee-fly 2s ease-in-out infinite; }
|
|
3117
|
+
}
|
|
3118
|
+
@keyframes lane-dash { to { stroke-dashoffset: -11; } }
|
|
3098
3119
|
|
|
3099
|
-
/*
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3120
|
+
/* 彗尾:flow-dot 契约(名字 + box-shadow)——沿纵向弧线 offset-distance 俯冲 */
|
|
3121
|
+
.lane-flow::after {
|
|
3122
|
+
content: ""; position: absolute; top: 0; left: 0; margin: 0;
|
|
3123
|
+
width: 7px; height: 7px; border-radius: 50%;
|
|
3124
|
+
background: var(--accent); opacity: 0; offset-rotate: 0deg;
|
|
3125
|
+
offset-path: path("M14 2 C14 16 22 28 22 42");
|
|
3126
|
+
box-shadow: 0 -4px 6px 0 color-mix(in srgb, var(--accent) 50%, transparent),
|
|
3127
|
+
0 -8px 9px 0 color-mix(in srgb, var(--accent) 22%, transparent);
|
|
3128
|
+
}
|
|
3129
|
+
@keyframes flow-dot {
|
|
3130
|
+
0% { offset-distance: 0%; opacity: 0; }
|
|
3131
|
+
10% { opacity: 1; } 60% { opacity: 1; } 92% { opacity: 1; }
|
|
3132
|
+
100% { offset-distance: 100%; opacity: 0; }
|
|
3133
|
+
}
|
|
3134
|
+
|
|
3135
|
+
/* 蜜蜂:同一条弧线俯冲(图标朝向不依赖 offset-rotate,关键帧小幅摆动) */
|
|
3136
|
+
.flow-bee {
|
|
3137
|
+
position: absolute; top: 0; left: 0; margin: 0;
|
|
3138
|
+
width: 16px; height: 16px; opacity: 0; pointer-events: none;
|
|
3139
|
+
color: var(--accent); offset-rotate: 0deg;
|
|
3140
|
+
offset-path: path("M14 2 C14 16 22 28 22 42");
|
|
3141
|
+
filter: drop-shadow(0 2px 5px color-mix(in srgb, var(--accent) 35%, transparent));
|
|
3142
|
+
}
|
|
3143
|
+
.flow-bee img { width: 100%; height: 100%; }
|
|
3144
|
+
/* 写实小蜂(icons/bee.svg,自带扇翅动画):格内 15px + 主题色微光 */
|
|
3145
|
+
.hive-cell .hc-bee { width: 15px; height: 15px; flex: none; }
|
|
3146
|
+
.hive-cell.st-running .hc-bee {
|
|
3147
|
+
filter: drop-shadow(0 1px 3px color-mix(in srgb, var(--accent) 45%, transparent));
|
|
3148
|
+
}
|
|
3149
|
+
@keyframes bee-fly {
|
|
3150
|
+
0% { offset-distance: 0%; opacity: 0; transform: rotate(-8deg); }
|
|
3151
|
+
12% { opacity: 1; }
|
|
3152
|
+
30% { transform: rotate(7deg); }
|
|
3153
|
+
55% { transform: rotate(-6deg); }
|
|
3154
|
+
80% { transform: rotate(6deg); }
|
|
3155
|
+
90% { opacity: 1; }
|
|
3156
|
+
100% { offset-distance: 100%; opacity: 0; transform: rotate(-4deg); }
|
|
3157
|
+
}
|
|
3104
3158
|
|
|
3105
3159
|
/* 报告里的 md 围栏代码块走 codeBlockHTML(.code-block 行号表格):
|
|
3106
3160
|
抵消 .report td 的表格边框/内距,避免代码格画成九宫格 */
|
|
@@ -3123,246 +3177,6 @@ html[data-skin="contrast"] .lane-idx { box-shadow: none; }
|
|
|
3123
3177
|
border-color: var(--accent); color: var(--accent);
|
|
3124
3178
|
}
|
|
3125
3179
|
|
|
3126
|
-
/* ================= CodeBee 工作台重构 =================
|
|
3127
|
-
* 这层只消费既有皮肤变量,保留 app.js 的换肤、状态、SSE 和详情结构。
|
|
3128
|
-
* 目标是把原本偏终端化的视觉,收束为适合长期使用的正式工作台。 */
|
|
3129
|
-
:root {
|
|
3130
|
-
--cb-font: "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", sans-serif;
|
|
3131
|
-
--cb-display: "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", sans-serif;
|
|
3132
|
-
--cb-surface: color-mix(in srgb, var(--panel) 92%, transparent);
|
|
3133
|
-
--cb-surface-soft: color-mix(in srgb, var(--panel2) 72%, transparent);
|
|
3134
|
-
--cb-accent-soft: color-mix(in srgb, var(--accent) 10%, var(--panel));
|
|
3135
|
-
--cb-accent-line: color-mix(in srgb, var(--accent) 34%, var(--border));
|
|
3136
|
-
--cb-shadow: 0 10px 26px color-mix(in srgb, var(--text) 6%, transparent);
|
|
3137
|
-
}
|
|
3138
|
-
|
|
3139
|
-
body {
|
|
3140
|
-
font-family: var(--cb-font);
|
|
3141
|
-
font-size: 14px;
|
|
3142
|
-
line-height: 1.7;
|
|
3143
|
-
letter-spacing: 0;
|
|
3144
|
-
background: var(--bg);
|
|
3145
|
-
}
|
|
3146
|
-
html[data-theme="light"] body {
|
|
3147
|
-
background-color: color-mix(in srgb, var(--bg) 93%, var(--accent) 7%);
|
|
3148
|
-
background-image: linear-gradient(180deg, color-mix(in srgb, var(--accent) 4%, transparent), transparent 240px);
|
|
3149
|
-
}
|
|
3150
|
-
html[data-skin="contrast"] body { background-image: none; }
|
|
3151
|
-
html[data-skin="contrast"][data-theme="light"] body { background-color: #fff; }
|
|
3152
|
-
|
|
3153
|
-
#app { grid-template-columns: 272px 1fr; }
|
|
3154
|
-
#sidebar {
|
|
3155
|
-
padding: 16px 13px 12px;
|
|
3156
|
-
background: color-mix(in srgb, var(--sidebar) 94%, var(--accent) 6%);
|
|
3157
|
-
border-right-color: color-mix(in srgb, var(--border) 80%, var(--accent) 20%);
|
|
3158
|
-
}
|
|
3159
|
-
.brand {
|
|
3160
|
-
min-height: 43px;
|
|
3161
|
-
margin: 0 3px 8px;
|
|
3162
|
-
padding: 7px 8px 13px;
|
|
3163
|
-
border-bottom-color: color-mix(in srgb, var(--accent) 22%, var(--border));
|
|
3164
|
-
}
|
|
3165
|
-
.brand-name { font-family: var(--cb-display); font-size: 17px; font-weight: 700; letter-spacing: .025em; }
|
|
3166
|
-
.new-task {
|
|
3167
|
-
min-height: 40px; padding: 9px 11px; margin: 0 0 6px;
|
|
3168
|
-
background: var(--cb-accent-soft); border: 1px solid var(--cb-accent-line);
|
|
3169
|
-
border-radius: 9px; color: var(--accent); font-weight: 600;
|
|
3170
|
-
transition: transform .18s ease, background-color .18s ease, box-shadow .18s ease;
|
|
3171
|
-
}
|
|
3172
|
-
.new-task:hover { background: color-mix(in srgb, var(--accent) 16%, var(--panel)); box-shadow: 0 5px 14px color-mix(in srgb, var(--accent) 14%, transparent); }
|
|
3173
|
-
.new-task:active { transform: translateY(1px); }
|
|
3174
|
-
.side-search, .qitem, .stask, .sdir summary, .side-settings .set-item, .set-back { border-radius: 7px; }
|
|
3175
|
-
.side-search, .qitem { color: var(--muted); }
|
|
3176
|
-
.side-search:hover, .qitem:hover, .stask:hover, .sdir summary:hover,
|
|
3177
|
-
.side-settings .set-item:hover, .set-back:hover { background: var(--cb-surface-soft); }
|
|
3178
|
-
.stask { padding: 7px 8px; }
|
|
3179
|
-
.stask.active, .side-settings .set-item.active {
|
|
3180
|
-
background: var(--cb-accent-soft); color: var(--accent); box-shadow: inset 2px 0 0 var(--accent);
|
|
3181
|
-
}
|
|
3182
|
-
.stask.active .tm, .side-settings .set-item.active .ico { color: var(--accent); }
|
|
3183
|
-
.side-label, .side-settings .set-group { font-size: 11px; font-weight: 700; letter-spacing: .08em; }
|
|
3184
|
-
.side-foot { border-top-color: var(--border); padding-top: 12px; }
|
|
3185
|
-
|
|
3186
|
-
.topbar {
|
|
3187
|
-
min-height: 57px; padding: 11px 28px;
|
|
3188
|
-
background: color-mix(in srgb, var(--bg) 88%, transparent);
|
|
3189
|
-
border-bottom-color: color-mix(in srgb, var(--border) 86%, var(--accent) 14%);
|
|
3190
|
-
backdrop-filter: blur(16px);
|
|
3191
|
-
}
|
|
3192
|
-
.page-title { font-family: var(--cb-display); font-size: 16px; font-weight: 700; letter-spacing: .02em; }
|
|
3193
|
-
.icon-btn, .foot-btn { border-radius: 7px; }
|
|
3194
|
-
.pill { background: var(--cb-surface); border-color: var(--border); box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 4%, transparent); }
|
|
3195
|
-
.pill:hover { border-color: var(--cb-accent-line); color: var(--accent); }
|
|
3196
|
-
|
|
3197
|
-
main { padding: 30px 36px 88px; }
|
|
3198
|
-
.page { max-width: 1480px; gap: 24px; }
|
|
3199
|
-
.subpage { gap: 24px; }
|
|
3200
|
-
main .panel.wide { padding: 0; }
|
|
3201
|
-
.panel-head {
|
|
3202
|
-
margin-bottom: 18px; padding: 0 0 14px;
|
|
3203
|
-
border-bottom-color: color-mix(in srgb, var(--border) 84%, var(--accent) 16%);
|
|
3204
|
-
}
|
|
3205
|
-
.panel-head h2, h2 { font-family: var(--cb-display); font-size: 18px; font-weight: 700; letter-spacing: .02em; }
|
|
3206
|
-
h3.sec-title, .sec-title { color: var(--muted); font-size: 11.5px; letter-spacing: .11em; }
|
|
3207
|
-
.hint { line-height: 1.75; }
|
|
3208
|
-
|
|
3209
|
-
input, select, textarea {
|
|
3210
|
-
background: var(--cb-surface); border-color: var(--border);
|
|
3211
|
-
border-radius: 8px; font-family: inherit;
|
|
3212
|
-
transition: border-color .18s ease, box-shadow .18s ease, background-color .18s ease;
|
|
3213
|
-
}
|
|
3214
|
-
input:hover, select:hover, textarea:hover { background: var(--panel); border-color: var(--border-strong); }
|
|
3215
|
-
input:focus, select:focus, textarea:focus {
|
|
3216
|
-
border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 11%, transparent);
|
|
3217
|
-
}
|
|
3218
|
-
button { font-family: inherit; }
|
|
3219
|
-
button.primary {
|
|
3220
|
-
border-radius: 8px; font-weight: 600; letter-spacing: .01em;
|
|
3221
|
-
box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 20%, transparent);
|
|
3222
|
-
}
|
|
3223
|
-
button.ghost, button.danger { border-radius: 8px; }
|
|
3224
|
-
button.ghost:hover { border-color: var(--cb-accent-line); color: var(--accent); background: var(--cb-accent-soft); }
|
|
3225
|
-
|
|
3226
|
-
/* 首页任务创建:保留原表单功能,将其组织成一个稳定的操作面。 */
|
|
3227
|
-
.composer { max-width: 1180px; margin: 28px auto 0; }
|
|
3228
|
-
.hero-row { align-items: flex-end; }
|
|
3229
|
-
#cmp-greet { font-family: var(--cb-display); font-size: 26px; font-weight: 600; line-height: 1.4; letter-spacing: .015em; }
|
|
3230
|
-
.hero-sub { font-size: 13px; max-width: 720px; }
|
|
3231
|
-
.cmp-pills { gap: 9px; margin-top: 22px; }
|
|
3232
|
-
.cmp-pills .type-pick, .cmp-wd { background: var(--cb-surface); border-color: var(--border); }
|
|
3233
|
-
.cmp-pills .type-pick:hover, .cmp-wd:hover { border-color: var(--cb-accent-line); }
|
|
3234
|
-
.cmp-box {
|
|
3235
|
-
border-radius: 11px; padding: 8px 10px 9px; background: var(--cb-surface);
|
|
3236
|
-
border-color: color-mix(in srgb, var(--border) 82%, var(--accent) 18%);
|
|
3237
|
-
box-shadow: var(--cb-shadow);
|
|
3238
|
-
}
|
|
3239
|
-
.cmp-box:focus-within { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 10%, transparent), var(--cb-shadow); }
|
|
3240
|
-
.cmp-box textarea { min-height: 98px; font-size: 16px; }
|
|
3241
|
-
.cmp-quick { margin-top: 14px; }
|
|
3242
|
-
.cmp-chip { background: transparent; border-radius: 7px; }
|
|
3243
|
-
.cmp-chip.on { background: var(--cb-accent-soft); }
|
|
3244
|
-
|
|
3245
|
-
/* 全局数据面:运行记录、智能体、模型、自动化、市场和设置复用同一张工作卡。 */
|
|
3246
|
-
.item, .card, .mcard, .opanel, .auto-tpl-card, .cs-preview, .skin-card, .bm-card {
|
|
3247
|
-
background: var(--cb-surface); border-color: var(--border); border-radius: 10px;
|
|
3248
|
-
box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 3%, transparent);
|
|
3249
|
-
transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease, background-color .2s ease;
|
|
3250
|
-
}
|
|
3251
|
-
.item:hover, .card:hover, .mcard:hover, .opanel:hover, .auto-tpl-card:hover, .skin-card:hover, .bm-card:hover {
|
|
3252
|
-
background: var(--panel); border-color: var(--cb-accent-line);
|
|
3253
|
-
box-shadow: var(--cb-shadow); transform: translateY(-2px);
|
|
3254
|
-
}
|
|
3255
|
-
.item { padding: 14px 16px; }
|
|
3256
|
-
.item .name, .card .name { font-weight: 700; }
|
|
3257
|
-
.cards { gap: 16px; }
|
|
3258
|
-
.card { padding: 17px; }
|
|
3259
|
-
.mcard { background: var(--cb-surface-soft); }
|
|
3260
|
-
.tag, .chip, .stat { border-radius: 6px; }
|
|
3261
|
-
.chip { padding: 3px 10px; font-weight: 700; }
|
|
3262
|
-
.chip.running { background: color-mix(in srgb, var(--accent) 13%, var(--panel)); }
|
|
3263
|
-
.usage-kpis { gap: 14px; }
|
|
3264
|
-
.usage-kpi, .usage-single, .usage-donut, .usage-heat, .usage-recent-wrap { background: var(--cb-surface); border: 1px solid var(--border); border-radius: 10px; }
|
|
3265
|
-
.usage-table th { background: var(--cb-surface-soft); }
|
|
3266
|
-
.usage-table tr:hover td { background: color-mix(in srgb, var(--accent) 5%, transparent); }
|
|
3267
|
-
.seg { background: var(--cb-surface-soft); border: 1px solid var(--border); border-radius: 8px; padding: 3px; }
|
|
3268
|
-
.seg-btn { border-radius: 6px; }
|
|
3269
|
-
.seg-btn.active { background: var(--panel); color: var(--accent); box-shadow: 0 1px 4px color-mix(in srgb, var(--text) 8%, transparent); }
|
|
3270
|
-
.skin-grid { gap: 14px; }
|
|
3271
|
-
.skin-card.active { border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 13%, transparent); }
|
|
3272
|
-
|
|
3273
|
-
/* 运行详情:头部、指标和页签建立固定层级,信息可扫读。 */
|
|
3274
|
-
#run-detail {
|
|
3275
|
-
max-width: 1240px; margin: 0 auto; padding: 0;
|
|
3276
|
-
animation: cb-detail-in .38s cubic-bezier(.2, .8, .2, 1) both;
|
|
3277
|
-
}
|
|
3278
|
-
@keyframes cb-detail-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
|
|
3279
|
-
#run-detail .detail-head {
|
|
3280
|
-
position: sticky; top: -30px; z-index: 5; padding: 16px 0 13px;
|
|
3281
|
-
background: color-mix(in srgb, var(--bg) 92%, transparent); backdrop-filter: blur(16px);
|
|
3282
|
-
border-bottom: 1px solid color-mix(in srgb, var(--border) 84%, var(--accent) 16%);
|
|
3283
|
-
}
|
|
3284
|
-
#run-detail .detail-head h2 { font-family: var(--cb-display); font-size: 18px; font-weight: 700; line-height: 1.5; }
|
|
3285
|
-
.rd-meta-strip { gap: 8px; margin: 17px 0 14px; }
|
|
3286
|
-
.rd-meta-strip .stat { background: var(--cb-surface); border: 1px solid var(--border); padding: 5px 10px; }
|
|
3287
|
-
.rd-tabs {
|
|
3288
|
-
position: sticky; top: 61px; z-index: 4; margin: 0 -4px 18px; padding: 4px;
|
|
3289
|
-
background: color-mix(in srgb, var(--bg) 90%, transparent); border-bottom: 1px solid var(--border);
|
|
3290
|
-
backdrop-filter: blur(14px);
|
|
3291
|
-
}
|
|
3292
|
-
.rd-tab { min-height: 34px; padding: 7px 13px; border-radius: 7px; }
|
|
3293
|
-
.rd-tab.active { background: var(--cb-accent-soft); }
|
|
3294
|
-
.rd-tab.active::after { display: none; }
|
|
3295
|
-
.rd-main { gap: 16px; }
|
|
3296
|
-
.rd-pane { animation: cb-pane-in .28s ease both; }
|
|
3297
|
-
@keyframes cb-pane-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
|
|
3298
|
-
.steps { gap: 10px; }
|
|
3299
|
-
.step { background: var(--cb-surface); border-color: var(--border); border-radius: 9px; padding: 11px 13px; }
|
|
3300
|
-
.step:hover { background: var(--panel); border-color: var(--cb-accent-line); }
|
|
3301
|
-
.step .n { background: var(--cb-accent-soft); color: var(--accent); border-radius: 6px; }
|
|
3302
|
-
.rd-direct, .rd-logdrawer, .rd-arts, .rd-git, .rd-bible, .report {
|
|
3303
|
-
background: var(--cb-surface); border-color: var(--border); border-radius: 10px;
|
|
3304
|
-
}
|
|
3305
|
-
.report { padding: 16px 20px; }
|
|
3306
|
-
.logbox, #run-detail #rd-log.rd-logdrawer { border-radius: 10px; overflow: hidden; }
|
|
3307
|
-
|
|
3308
|
-
/* 蜂巢工作台:皮肤色作为状态语言,卡片和流程留在同一浅层空间。 */
|
|
3309
|
-
.rd-hive { padding: 2px 0 8px; }
|
|
3310
|
-
.rd-hive .sec-title { font-family: var(--cb-font); letter-spacing: .08em; }
|
|
3311
|
-
.rd-hive .sec-title > span:not(.tag), .rd-hive .sec-title .ico { color: var(--accent); }
|
|
3312
|
-
.hive-lane {
|
|
3313
|
-
position: relative; overflow: hidden; padding: 13px 14px;
|
|
3314
|
-
background: var(--cb-surface); border: 1px solid var(--border); border-radius: 10px;
|
|
3315
|
-
box-shadow: none; color: var(--text);
|
|
3316
|
-
}
|
|
3317
|
-
.hive-lane::before {
|
|
3318
|
-
content: ""; position: absolute; inset: 0 0 auto; height: 2px;
|
|
3319
|
-
background: color-mix(in srgb, var(--accent) 42%, transparent); opacity: .7;
|
|
3320
|
-
}
|
|
3321
|
-
.hive-lane.lane-active {
|
|
3322
|
-
border-color: var(--cb-accent-line); background: color-mix(in srgb, var(--accent) 5%, var(--panel));
|
|
3323
|
-
box-shadow: 0 8px 20px color-mix(in srgb, var(--accent) 9%, transparent);
|
|
3324
|
-
}
|
|
3325
|
-
.hive-lane.lane-active::before { animation: cb-lane-live 2.2s ease-in-out infinite; }
|
|
3326
|
-
@keyframes cb-lane-live { 50% { opacity: 1; background: var(--accent); } }
|
|
3327
|
-
.lane-name, .hc-role { color: var(--text); text-shadow: none; }
|
|
3328
|
-
.lane-n, .lane-prog, .hc-who, .hc-meta { color: var(--muted); }
|
|
3329
|
-
.lane-idx { background: var(--cb-accent-soft); color: var(--accent); border: 1px solid var(--cb-accent-line); border-radius: 5px; box-shadow: none; }
|
|
3330
|
-
.lane-track::before { height: 1px; background: var(--border); }
|
|
3331
|
-
.ld { width: 7px; height: 7px; border-radius: 50%; background: var(--border-strong); }
|
|
3332
|
-
.ld-done { background: var(--ok); }
|
|
3333
|
-
.ld-run { border-radius: 50%; background: var(--accent); animation: cb-node-pulse 1.4s ease-in-out infinite; }
|
|
3334
|
-
@keyframes cb-node-pulse { 50% { transform: scale(1.5); opacity: .45; } }
|
|
3335
|
-
.lane-flow::after { width: 7px; height: 7px; margin-top: -3px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 12%, transparent); }
|
|
3336
|
-
.hive-cell {
|
|
3337
|
-
position: relative; overflow: hidden; padding: 12px;
|
|
3338
|
-
background: var(--panel); border-color: var(--border); border-radius: 8px; box-shadow: none; color: var(--text);
|
|
3339
|
-
}
|
|
3340
|
-
.hive-cell::before { height: 2px; border-radius: 0; background: var(--border); }
|
|
3341
|
-
.hive-cell.st-running { border-color: var(--cb-accent-line); box-shadow: 0 4px 14px color-mix(in srgb, var(--accent) 10%, transparent); }
|
|
3342
|
-
.hive-cell.st-running::before { background: var(--accent); }
|
|
3343
|
-
.hive-cell.st-done::before { background: var(--ok); }
|
|
3344
|
-
.hive-cell.st-failed::before { background: var(--bad); }
|
|
3345
|
-
.hive-cell:hover { transform: translateY(-2px); box-shadow: var(--cb-shadow); border-color: var(--cb-accent-line); }
|
|
3346
|
-
.hc-tail { background: var(--cb-surface-soft); border-color: var(--border); border-radius: 5px; color: var(--muted); }
|
|
3347
|
-
.hive-cell .hc-live { border-radius: 999px; }
|
|
3348
|
-
|
|
3349
|
-
/* 动效在高负荷运行时有反馈,同时尊重系统的减少动态效果偏好。 */
|
|
3350
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
3351
|
-
.page:not(.hidden) > .subpage:not(.hidden) { animation: cb-page-in .35s ease both; }
|
|
3352
|
-
@keyframes cb-page-in { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: translateY(0); } }
|
|
3353
|
-
}
|
|
3354
|
-
@media (prefers-reduced-motion: reduce) {
|
|
3355
|
-
*, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
|
|
3356
|
-
}
|
|
3357
|
-
@media (max-width: 900px) {
|
|
3358
|
-
#app { grid-template-columns: 1fr; }
|
|
3359
|
-
main { padding: 22px 18px 72px; }
|
|
3360
|
-
.topbar { padding: 10px 16px; }
|
|
3361
|
-
.top-actions { gap: 5px; }
|
|
3362
|
-
#run-detail .detail-head { top: -22px; }
|
|
3363
|
-
.rd-tabs { top: 57px; }
|
|
3364
|
-
}
|
|
3365
|
-
|
|
3366
3180
|
/* 关于与更新:更新内容展示块(relnotes/whatsnew 共用) */
|
|
3367
3181
|
.su-notes {
|
|
3368
3182
|
white-space: pre-wrap;
|
|
@@ -3377,3 +3191,36 @@ button.ghost:hover { border-color: var(--cb-accent-line); color: var(--accent);
|
|
|
3377
3191
|
max-height: 40vh;
|
|
3378
3192
|
overflow: auto;
|
|
3379
3193
|
}
|
|
3194
|
+
|
|
3195
|
+
/* —— 日志抽屉精修(点蜂巢格弹出/再点收起的逐步输出框):告别终端黑岛,随肤一体 ——
|
|
3196
|
+
* 契约不动:#rd-log/.hidden 开合、#rd-log-text pre 自动跟底、状态条各 id 原样 */
|
|
3197
|
+
#run-detail #rd-log.rd-logdrawer {
|
|
3198
|
+
border: 1px solid color-mix(in srgb, var(--border) 72%, var(--accent) 28%);
|
|
3199
|
+
border-bottom: none;
|
|
3200
|
+
border-radius: 12px 12px 0 0;
|
|
3201
|
+
background: var(--panel);
|
|
3202
|
+
box-shadow: 0 -10px 30px color-mix(in srgb, var(--text) 12%, transparent),
|
|
3203
|
+
0 -2px 8px color-mix(in srgb, var(--accent) 8%, transparent);
|
|
3204
|
+
}
|
|
3205
|
+
#run-detail #rd-log.rd-logdrawer .log-live-bar {
|
|
3206
|
+
background: linear-gradient(180deg,
|
|
3207
|
+
color-mix(in srgb, var(--accent) 6%, var(--panel2)), var(--panel2));
|
|
3208
|
+
border-bottom: 1px solid var(--border);
|
|
3209
|
+
}
|
|
3210
|
+
#run-detail #rd-log.rd-logdrawer .log-live-bar > .ico { color: var(--accent); }
|
|
3211
|
+
#run-detail #rd-log.rd-logdrawer .rd-log-step { color: var(--accent); }
|
|
3212
|
+
#run-detail #rd-log.rd-logdrawer pre {
|
|
3213
|
+
color: color-mix(in srgb, var(--text) 88%, var(--muted));
|
|
3214
|
+
font-size: 12.5px;
|
|
3215
|
+
line-height: 1.65;
|
|
3216
|
+
background:
|
|
3217
|
+
linear-gradient(180deg, color-mix(in srgb, var(--accent) 3%, transparent), transparent 90px),
|
|
3218
|
+
var(--panel);
|
|
3219
|
+
}
|
|
3220
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3221
|
+
#run-detail #rd-log.rd-logdrawer:not(.hidden) { animation: cb-drawer-up .26s cubic-bezier(.22, .9, .3, 1); }
|
|
3222
|
+
}
|
|
3223
|
+
@keyframes cb-drawer-up {
|
|
3224
|
+
from { transform: translateY(16px); opacity: .35; }
|
|
3225
|
+
to { transform: translateY(0); opacity: 1; }
|
|
3226
|
+
}
|
package/package.json
CHANGED