botmux 3.12.0 → 3.12.1

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 (229) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/backend/riff-backend.d.ts +18 -0
  3. package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
  4. package/dist/adapters/backend/riff-backend.js +143 -0
  5. package/dist/adapters/backend/riff-backend.js.map +1 -1
  6. package/dist/adapters/cli/kimi.d.ts.map +1 -1
  7. package/dist/adapters/cli/kimi.js +22 -8
  8. package/dist/adapters/cli/kimi.js.map +1 -1
  9. package/dist/adapters/cli/pi.d.ts.map +1 -1
  10. package/dist/adapters/cli/pi.js +3 -1
  11. package/dist/adapters/cli/pi.js.map +1 -1
  12. package/dist/bot-registry.d.ts.map +1 -1
  13. package/dist/bot-registry.js +4 -1
  14. package/dist/bot-registry.js.map +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +65 -27
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/command-handler.d.ts.map +1 -1
  19. package/dist/core/command-handler.js +16 -2
  20. package/dist/core/command-handler.js.map +1 -1
  21. package/dist/core/dashboard-ipc-server.js +1 -1
  22. package/dist/core/dashboard-ipc-server.js.map +1 -1
  23. package/dist/core/dashboard-rows.d.ts +17 -1
  24. package/dist/core/dashboard-rows.d.ts.map +1 -1
  25. package/dist/core/dashboard-rows.js +13 -1
  26. package/dist/core/dashboard-rows.js.map +1 -1
  27. package/dist/core/maintenance.d.ts.map +1 -1
  28. package/dist/core/maintenance.js +5 -0
  29. package/dist/core/maintenance.js.map +1 -1
  30. package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
  31. package/dist/core/skills/cli-admin-command.js +142 -3
  32. package/dist/core/skills/cli-admin-command.js.map +1 -1
  33. package/dist/core/skills/frontmatter.d.ts.map +1 -1
  34. package/dist/core/skills/frontmatter.js +44 -7
  35. package/dist/core/skills/frontmatter.js.map +1 -1
  36. package/dist/core/skills/im-command.d.ts +6 -0
  37. package/dist/core/skills/im-command.d.ts.map +1 -1
  38. package/dist/core/skills/im-command.js +34 -7
  39. package/dist/core/skills/im-command.js.map +1 -1
  40. package/dist/core/skills/install-command.d.ts +4 -0
  41. package/dist/core/skills/install-command.d.ts.map +1 -0
  42. package/dist/core/skills/install-command.js +89 -0
  43. package/dist/core/skills/install-command.js.map +1 -0
  44. package/dist/core/skills/package.d.ts.map +1 -1
  45. package/dist/core/skills/package.js +10 -3
  46. package/dist/core/skills/package.js.map +1 -1
  47. package/dist/core/skills/policy.d.ts +5 -1
  48. package/dist/core/skills/policy.d.ts.map +1 -1
  49. package/dist/core/skills/policy.js +66 -3
  50. package/dist/core/skills/policy.js.map +1 -1
  51. package/dist/core/skills/references.d.ts +9 -1
  52. package/dist/core/skills/references.d.ts.map +1 -1
  53. package/dist/core/skills/references.js +35 -2
  54. package/dist/core/skills/references.js.map +1 -1
  55. package/dist/core/skills/registry-paths.d.ts +1 -0
  56. package/dist/core/skills/registry-paths.d.ts.map +1 -1
  57. package/dist/core/skills/registry-paths.js +3 -0
  58. package/dist/core/skills/registry-paths.js.map +1 -1
  59. package/dist/core/skills/session-resolver.d.ts +2 -1
  60. package/dist/core/skills/session-resolver.d.ts.map +1 -1
  61. package/dist/core/skills/session-resolver.js +1 -0
  62. package/dist/core/skills/session-resolver.js.map +1 -1
  63. package/dist/core/skills/session-runtime.d.ts.map +1 -1
  64. package/dist/core/skills/session-runtime.js +2 -0
  65. package/dist/core/skills/session-runtime.js.map +1 -1
  66. package/dist/core/skills/sources.d.ts +23 -0
  67. package/dist/core/skills/sources.d.ts.map +1 -1
  68. package/dist/core/skills/sources.js +128 -12
  69. package/dist/core/skills/sources.js.map +1 -1
  70. package/dist/core/skills/types.d.ts +22 -1
  71. package/dist/core/skills/types.d.ts.map +1 -1
  72. package/dist/core/types.d.ts +2 -0
  73. package/dist/core/types.d.ts.map +1 -1
  74. package/dist/core/types.js.map +1 -1
  75. package/dist/core/worker-pool.d.ts.map +1 -1
  76. package/dist/core/worker-pool.js +52 -1
  77. package/dist/core/worker-pool.js.map +1 -1
  78. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  79. package/dist/dashboard/bot-onboarding.js +2 -114
  80. package/dist/dashboard/bot-onboarding.js.map +1 -1
  81. package/dist/dashboard/connector-api.d.ts.map +1 -1
  82. package/dist/dashboard/connector-api.js +66 -6
  83. package/dist/dashboard/connector-api.js.map +1 -1
  84. package/dist/dashboard/public-redact.d.ts.map +1 -1
  85. package/dist/dashboard/public-redact.js +3 -0
  86. package/dist/dashboard/public-redact.js.map +1 -1
  87. package/dist/dashboard/skill-install-request.js +10 -11
  88. package/dist/dashboard/skill-install-request.js.map +1 -1
  89. package/dist/dashboard/skill-pack-response.d.ts +15 -0
  90. package/dist/dashboard/skill-pack-response.d.ts.map +1 -0
  91. package/dist/dashboard/skill-pack-response.js +32 -0
  92. package/dist/dashboard/skill-pack-response.js.map +1 -0
  93. package/dist/dashboard/web/connectors-page.d.ts +69 -0
  94. package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
  95. package/dist/dashboard/web/connectors-page.js +47 -7
  96. package/dist/dashboard/web/connectors-page.js.map +1 -1
  97. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  98. package/dist/dashboard/web/i18n.js +301 -26
  99. package/dist/dashboard/web/i18n.js.map +1 -1
  100. package/dist/dashboard/web/preferences.d.ts +4 -2
  101. package/dist/dashboard/web/preferences.d.ts.map +1 -1
  102. package/dist/dashboard/web/preferences.js +14 -6
  103. package/dist/dashboard/web/preferences.js.map +1 -1
  104. package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
  105. package/dist/dashboard/web/sessions-page.js +99 -3
  106. package/dist/dashboard/web/sessions-page.js.map +1 -1
  107. package/dist/dashboard/web/sessions.d.ts +3 -1
  108. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  109. package/dist/dashboard/web/sessions.js +13 -6
  110. package/dist/dashboard/web/sessions.js.map +1 -1
  111. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts +27 -0
  112. package/dist/dashboard/web/skills/bot-assignments-tab.d.ts.map +1 -0
  113. package/dist/dashboard/web/skills/bot-assignments-tab.js +257 -0
  114. package/dist/dashboard/web/skills/bot-assignments-tab.js.map +1 -0
  115. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts +25 -0
  116. package/dist/dashboard/web/skills/delivery-settings-tab.d.ts.map +1 -0
  117. package/dist/dashboard/web/skills/delivery-settings-tab.js +20 -0
  118. package/dist/dashboard/web/skills/delivery-settings-tab.js.map +1 -0
  119. package/dist/dashboard/web/skills/shared.d.ts +86 -0
  120. package/dist/dashboard/web/skills/shared.d.ts.map +1 -0
  121. package/dist/dashboard/web/skills/shared.js +178 -0
  122. package/dist/dashboard/web/skills/shared.js.map +1 -0
  123. package/dist/dashboard/web/skills/skill-library-tab.d.ts +75 -0
  124. package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -0
  125. package/dist/dashboard/web/skills/skill-library-tab.js +108 -0
  126. package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -0
  127. package/dist/dashboard/web/skills/skill-packs-tab.d.ts +21 -0
  128. package/dist/dashboard/web/skills/skill-packs-tab.d.ts.map +1 -0
  129. package/dist/dashboard/web/skills/skill-packs-tab.js +185 -0
  130. package/dist/dashboard/web/skills/skill-packs-tab.js.map +1 -0
  131. package/dist/dashboard/web/skills/types.d.ts +95 -0
  132. package/dist/dashboard/web/skills/types.d.ts.map +1 -0
  133. package/dist/dashboard/web/skills/types.js +2 -0
  134. package/dist/dashboard/web/skills/types.js.map +1 -0
  135. package/dist/dashboard/web/skills/use-skills-data.d.ts +31 -0
  136. package/dist/dashboard/web/skills/use-skills-data.d.ts.map +1 -0
  137. package/dist/dashboard/web/skills/use-skills-data.js +86 -0
  138. package/dist/dashboard/web/skills/use-skills-data.js.map +1 -0
  139. package/dist/dashboard/web/skills-page.d.ts +34 -31
  140. package/dist/dashboard/web/skills-page.d.ts.map +1 -1
  141. package/dist/dashboard/web/skills-page.js +321 -176
  142. package/dist/dashboard/web/skills-page.js.map +1 -1
  143. package/dist/dashboard/webhook-routes.d.ts +18 -0
  144. package/dist/dashboard/webhook-routes.d.ts.map +1 -1
  145. package/dist/dashboard/webhook-routes.js +35 -1
  146. package/dist/dashboard/webhook-routes.js.map +1 -1
  147. package/dist/dashboard-web/app.js +1 -1
  148. package/dist/dashboard-web/chunks/{bot-defaults-page-USC6EZXP.js → bot-defaults-page-HL655CNR.js} +1 -1
  149. package/dist/dashboard-web/chunks/{chunk-KOPISPHN.js → chunk-5PAYQ3KT.js} +1 -1
  150. package/dist/dashboard-web/chunks/{chunk-RXRJB5SO.js → chunk-5ZL7NLR5.js} +1 -1
  151. package/dist/dashboard-web/chunks/{chunk-A7VC4BXR.js → chunk-BFUTTYVK.js} +1 -1
  152. package/dist/dashboard-web/chunks/chunk-ELL53D62.js +55 -0
  153. package/dist/dashboard-web/chunks/connectors-page-3QQACF23.js +1 -0
  154. package/dist/dashboard-web/chunks/{groups-page-C6NSDTIN.js → groups-page-SDZMJ7UV.js} +1 -1
  155. package/dist/dashboard-web/chunks/{insights-page-UTOVYLLY.js → insights-page-ZZ3JEJ6L.js} +1 -1
  156. package/dist/dashboard-web/chunks/{monitor-room-UKTJYTA2.js → monitor-room-ROJ5GZ4N.js} +1 -1
  157. package/dist/dashboard-web/chunks/{monitoring-page-Q3CEZIVX.js → monitoring-page-IATV7KJF.js} +1 -1
  158. package/dist/dashboard-web/chunks/{office-page-GYCZOOVJ.js → office-page-TYO5OIIT.js} +1 -1
  159. package/dist/dashboard-web/chunks/{overview-page-W2VBJ6OH.js → overview-page-VJUULZF2.js} +1 -1
  160. package/dist/dashboard-web/chunks/{roles-page-U4SHER4K.js → roles-page-7RJJKZGK.js} +1 -1
  161. package/dist/dashboard-web/chunks/{schedules-page-TNPW3N3Q.js → schedules-page-JTEJ5IXW.js} +1 -1
  162. package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +8 -0
  163. package/dist/dashboard-web/chunks/{settings-page-VKW5ZK5K.js → settings-page-7CTTFBRS.js} +1 -1
  164. package/dist/dashboard-web/chunks/skills-page-57NZECJ3.js +4 -0
  165. package/dist/dashboard-web/chunks/{team-federation-page-OMFGGBT2.js → team-federation-page-6YYIMJG3.js} +1 -1
  166. package/dist/dashboard-web/chunks/{v3-page-PLXWK4KO.js → v3-page-ZGKBSBK3.js} +1 -1
  167. package/dist/dashboard-web/chunks/{whiteboards-page-NJQOEO2P.js → whiteboards-page-AACJF6DB.js} +1 -1
  168. package/dist/dashboard-web/style.css +1623 -160
  169. package/dist/dashboard.js +200 -16
  170. package/dist/dashboard.js.map +1 -1
  171. package/dist/i18n/en.d.ts.map +1 -1
  172. package/dist/i18n/en.js +2 -0
  173. package/dist/i18n/en.js.map +1 -1
  174. package/dist/i18n/zh.d.ts.map +1 -1
  175. package/dist/i18n/zh.js +2 -0
  176. package/dist/i18n/zh.js.map +1 -1
  177. package/dist/index-daemon.js +6 -1
  178. package/dist/index-daemon.js.map +1 -1
  179. package/dist/services/connector-store.d.ts +14 -1
  180. package/dist/services/connector-store.d.ts.map +1 -1
  181. package/dist/services/connector-store.js.map +1 -1
  182. package/dist/services/connector-topic-template.d.ts +7 -0
  183. package/dist/services/connector-topic-template.d.ts.map +1 -0
  184. package/dist/services/connector-topic-template.js +210 -0
  185. package/dist/services/connector-topic-template.js.map +1 -0
  186. package/dist/services/project-scanner.d.ts +33 -0
  187. package/dist/services/project-scanner.d.ts.map +1 -1
  188. package/dist/services/project-scanner.js +40 -1
  189. package/dist/services/project-scanner.js.map +1 -1
  190. package/dist/services/skill-pack-store.d.ts +50 -0
  191. package/dist/services/skill-pack-store.d.ts.map +1 -0
  192. package/dist/services/skill-pack-store.js +270 -0
  193. package/dist/services/skill-pack-store.js.map +1 -0
  194. package/dist/services/skill-registry-store.d.ts +8 -0
  195. package/dist/services/skill-registry-store.d.ts.map +1 -1
  196. package/dist/services/skill-registry-store.js +100 -68
  197. package/dist/services/skill-registry-store.js.map +1 -1
  198. package/dist/services/todo-state.d.ts +74 -0
  199. package/dist/services/todo-state.d.ts.map +1 -0
  200. package/dist/services/todo-state.js +351 -0
  201. package/dist/services/todo-state.js.map +1 -0
  202. package/dist/setup/agent-preset.d.ts.map +1 -1
  203. package/dist/setup/agent-preset.js +2 -0
  204. package/dist/setup/agent-preset.js.map +1 -1
  205. package/dist/setup/owner-identity.d.ts +47 -0
  206. package/dist/setup/owner-identity.d.ts.map +1 -0
  207. package/dist/setup/owner-identity.js +196 -0
  208. package/dist/setup/owner-identity.js.map +1 -0
  209. package/dist/setup/register-app.d.ts +4 -3
  210. package/dist/setup/register-app.d.ts.map +1 -1
  211. package/dist/setup/register-app.js.map +1 -1
  212. package/dist/setup/setup-args.d.ts +1 -1
  213. package/dist/setup/setup-args.d.ts.map +1 -1
  214. package/dist/setup/setup-args.js +7 -3
  215. package/dist/setup/setup-args.js.map +1 -1
  216. package/dist/types.d.ts +11 -0
  217. package/dist/types.d.ts.map +1 -1
  218. package/dist/utils/child-env.d.ts +25 -0
  219. package/dist/utils/child-env.d.ts.map +1 -1
  220. package/dist/utils/child-env.js +47 -0
  221. package/dist/utils/child-env.js.map +1 -1
  222. package/dist/worker.js +55 -16
  223. package/dist/worker.js.map +1 -1
  224. package/dist/workflows/definition.d.ts +44 -44
  225. package/package.json +1 -1
  226. package/dist/dashboard-web/chunks/chunk-M6BHWQFO.js +0 -51
  227. package/dist/dashboard-web/chunks/connectors-page-4Z76HWRH.js +0 -1
  228. package/dist/dashboard-web/chunks/sessions-page-YWWDDV57.js +0 -6
  229. package/dist/dashboard-web/chunks/skills-page-ZCEDFGZZ.js +0 -4
@@ -2579,7 +2579,7 @@ button.primary {
2579
2579
  animation: board-led-pulse 1.6s ease-in-out infinite;
2580
2580
  }
2581
2581
 
2582
- .session-board-starting {
2582
+ .session-board-todo {
2583
2583
  --col-signal: var(--warning);
2584
2584
  }
2585
2585
 
@@ -2920,6 +2920,163 @@ button.primary {
2920
2920
  margin-left: 0;
2921
2921
  }
2922
2922
 
2923
+ /* 任务态徽标:告诉人「这张卡为什么在待办列」——机器空闲但还有未完成 TODO。
2924
+ 琥珀色区别于运行态 status(灰/蓝/绿),hasInProgress 时加脉冲圆点。 */
2925
+ /* 待办徽标:柔和描边 + 透明底(信息态,不喧宾夺主)。色调用偏红的橙红,
2926
+ 比原来的黄橙更有"该处理"的提示感,又不像红色报错。 */
2927
+ .session-todo-badge {
2928
+ display: inline-flex;
2929
+ align-items: center;
2930
+ gap: 5px;
2931
+ padding: 2px 8px;
2932
+ border-radius: var(--radius-full);
2933
+ font-family: var(--mono);
2934
+ font-weight: 700;
2935
+ font-size: 11px;
2936
+ line-height: 1.3;
2937
+ letter-spacing: 0.02em;
2938
+ white-space: nowrap;
2939
+ color: #c2410c;
2940
+ background: color-mix(in srgb, #ea580c 12%, transparent);
2941
+ border: 1px solid color-mix(in srgb, #ea580c 36%, transparent);
2942
+ position: relative;
2943
+ cursor: help;
2944
+ }
2945
+
2946
+ .session-todo-badge.pinned {
2947
+ color: #c2410c;
2948
+ background: color-mix(in srgb, #ea580c 22%, transparent);
2949
+ border-color: color-mix(in srgb, #ea580c 55%, transparent);
2950
+ cursor: pointer;
2951
+ }
2952
+
2953
+ .session-todo-dot {
2954
+ width: 6px;
2955
+ height: 6px;
2956
+ border-radius: 50%;
2957
+ background: #ea580c;
2958
+ animation: todo-pulse 1.6s ease-in-out infinite;
2959
+ }
2960
+
2961
+ @keyframes todo-pulse {
2962
+ 0%, 100% { opacity: 1; }
2963
+ 50% { opacity: 0.3; }
2964
+ }
2965
+
2966
+ /* 悬浮浮层:列出每条 TODO 的状态字形 + 文字。portal 到 body、fixed 定位(卡片/列
2967
+ 都是 overflow:hidden,绝对定位会被裁)。JS 控制挂载,位置由行内 left/top 给。
2968
+ 两态:hover 悬浮预览(移开即关);pinned 点击固定(不自动消失,文字可选中复制)。 */
2969
+ .session-todo-pop {
2970
+ position: fixed;
2971
+ z-index: 2000;
2972
+ display: flex;
2973
+ flex-direction: column;
2974
+ gap: 6px;
2975
+ min-width: 220px;
2976
+ max-width: 360px;
2977
+ padding: 10px 12px;
2978
+ border-radius: var(--radius-md, 8px);
2979
+ background: var(--surface-raised, #1b1f2a);
2980
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.12));
2981
+ box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35);
2982
+ color: var(--fg, #18202a);
2983
+ font-family: var(--sans, inherit);
2984
+ font-weight: 400;
2985
+ letter-spacing: 0;
2986
+ white-space: normal;
2987
+ animation: todo-pop-in 0.12s ease;
2988
+ user-select: none;
2989
+ }
2990
+
2991
+ /* 固定态:文字可选中复制,边框更实以区分「已锁定」。 */
2992
+ .session-todo-pop.pinned {
2993
+ user-select: text;
2994
+ border-color: color-mix(in srgb, var(--warning, #f5a623) 45%, var(--border, rgba(255, 255, 255, 0.12)));
2995
+ }
2996
+
2997
+ @keyframes todo-pop-in {
2998
+ from { opacity: 0; transform: translateY(-4px); }
2999
+ to { opacity: 1; transform: translateY(0); }
3000
+ }
3001
+
3002
+ .session-todo-pop-head {
3003
+ display: flex;
3004
+ align-items: center;
3005
+ justify-content: space-between;
3006
+ gap: 8px;
3007
+ font-size: 11px;
3008
+ font-weight: 700;
3009
+ color: var(--muted, #9aa3b2);
3010
+ padding-bottom: 4px;
3011
+ border-bottom: 1px solid var(--border, rgba(255, 255, 255, 0.1));
3012
+ }
3013
+
3014
+ .session-todo-pop-title {
3015
+ flex: 1 1 auto;
3016
+ min-width: 0;
3017
+ }
3018
+
3019
+ .session-todo-pop-hint {
3020
+ flex: none;
3021
+ font-weight: 500;
3022
+ font-size: 10px;
3023
+ opacity: 0.7;
3024
+ }
3025
+
3026
+ .session-todo-pop-copy {
3027
+ flex: none;
3028
+ cursor: pointer;
3029
+ font-family: var(--sans, inherit);
3030
+ font-size: 11px;
3031
+ font-weight: 600;
3032
+ color: var(--warning, #f5a623);
3033
+ background: color-mix(in srgb, var(--warning, #f5a623) 14%, transparent);
3034
+ border: 1px solid color-mix(in srgb, var(--warning, #f5a623) 40%, transparent);
3035
+ border-radius: var(--radius-sm, 5px);
3036
+ padding: 2px 8px;
3037
+ line-height: 1.4;
3038
+ transition: background 0.1s ease;
3039
+ }
3040
+
3041
+ .session-todo-pop-copy:hover {
3042
+ background: color-mix(in srgb, var(--warning, #f5a623) 24%, transparent);
3043
+ }
3044
+
3045
+ .session-todo-pop-list {
3046
+ display: flex;
3047
+ flex-direction: column;
3048
+ gap: 4px;
3049
+ max-height: 320px;
3050
+ overflow-y: auto;
3051
+ }
3052
+
3053
+ .session-todo-pop-item {
3054
+ display: flex;
3055
+ align-items: flex-start;
3056
+ gap: 6px;
3057
+ font-size: 12px;
3058
+ line-height: 1.4;
3059
+ }
3060
+
3061
+ .session-todo-pop-glyph {
3062
+ flex: none;
3063
+ width: 14px;
3064
+ text-align: center;
3065
+ font-family: var(--mono);
3066
+ font-weight: 700;
3067
+ }
3068
+
3069
+ /* 完成项最浅(灰+删除线),未完成项更深、进行中最深加粗——让「还没做的」在视觉上更突出。
3070
+ 注意用 --fg / --faint(本主题真实存在的 token);早前误用未定义的 --text/--text-secondary,
3071
+ 会回退到近白色 #e6e8ee,在浅色模式下几乎看不清。 */
3072
+ .session-todo-pop-item.st-completed { color: var(--faint, #7b8798); }
3073
+ .session-todo-pop-item.st-completed .session-todo-pop-text { text-decoration: line-through; }
3074
+ .session-todo-pop-item.st-completed .session-todo-pop-glyph { color: var(--success, #15803d); }
3075
+ .session-todo-pop-item.st-in-progress { color: var(--fg, #18202a); font-weight: 700; }
3076
+ .session-todo-pop-item.st-in-progress .session-todo-pop-glyph { color: var(--warning, #b7791f); }
3077
+ .session-todo-pop-item.st-pending { color: var(--fg, #18202a); }
3078
+ .session-todo-pop-item.st-pending .session-todo-pop-glyph { color: var(--muted, #627084); }
3079
+
2923
3080
  .session-signal {
2924
3081
  display: inline-flex;
2925
3082
  align-items: center;
@@ -10096,7 +10253,7 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
10096
10253
  .session-board-count { border-radius: var(--radius-full); font-family: inherit; }
10097
10254
  .session-board-needs-you { --col-signal: var(--warning); }
10098
10255
  .session-board-needs-you { background: color-mix(in srgb, var(--warning) 4%, var(--surface)); }
10099
- .session-board-starting { --col-signal: var(--info); }
10256
+ .session-board-todo { --col-signal: var(--info); }
10100
10257
  .session-board-working { --col-signal: var(--accent); }
10101
10258
  .session-board-idle { --col-signal: var(--success); }
10102
10259
  :root[data-theme="dark"] .session-board-needs-you {
@@ -10871,6 +11028,11 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
10871
11028
  position: relative;
10872
11029
  }
10873
11030
 
11031
+ .skills-install-anchor {
11032
+ min-width: 0;
11033
+ scroll-margin-top: 18px;
11034
+ }
11035
+
10874
11036
  .skills-install-title {
10875
11037
  position: relative;
10876
11038
  display: inline-flex;
@@ -10883,6 +11045,34 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
10883
11045
  margin: 0;
10884
11046
  }
10885
11047
 
11048
+ .skills-inline-target {
11049
+ display: flex;
11050
+ align-items: center;
11051
+ justify-content: space-between;
11052
+ gap: 12px;
11053
+ margin: 0 0 12px;
11054
+ padding: 9px 11px;
11055
+ border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border-soft));
11056
+ border-left: 3px solid var(--accent);
11057
+ border-radius: var(--radius-lg);
11058
+ background: color-mix(in srgb, var(--accent) 7%, var(--surface));
11059
+ color: var(--fg);
11060
+ font-size: 12px;
11061
+ font-weight: 700;
11062
+ }
11063
+
11064
+ .skills-inline-target button {
11065
+ flex: none;
11066
+ min-height: 28px;
11067
+ padding: 0 10px;
11068
+ border: 1px solid var(--border-soft);
11069
+ border-radius: var(--radius-full);
11070
+ background: var(--surface);
11071
+ color: var(--muted);
11072
+ font-size: 11px;
11073
+ font-weight: 700;
11074
+ }
11075
+
10886
11076
  .skills-card-head {
10887
11077
  display: flex;
10888
11078
  align-items: flex-end;
@@ -11006,19 +11196,12 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
11006
11196
  line-height: 1.35;
11007
11197
  }
11008
11198
 
11009
- .skills-source-help {
11010
- display: grid;
11011
- gap: 7px;
11012
- min-width: 0;
11013
- }
11014
-
11015
- .skills-source-help > span {
11016
- display: block;
11017
- }
11018
-
11019
- .skills-source-help strong {
11020
- color: var(--fg);
11021
- font-weight: 750;
11199
+ .skills-install-field-wide > small {
11200
+ margin-top: -3px;
11201
+ color: var(--faint);
11202
+ font-size: 10.5px;
11203
+ font-weight: 600;
11204
+ line-height: 1.35;
11022
11205
  }
11023
11206
 
11024
11207
  .skills-install-grid input,
@@ -11041,12 +11224,71 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
11041
11224
 
11042
11225
  .skills-install-bottom-row {
11043
11226
  display: grid;
11044
- grid-template-columns: minmax(0, 1fr);
11227
+ grid-template-columns: minmax(260px, .9fr) minmax(320px, 1.1fr);
11045
11228
  gap: 10px;
11046
11229
  align-items: center;
11047
11230
  min-width: 0;
11048
11231
  }
11049
11232
 
11233
+ .skills-install-bottom-row > .skills-local-discovery-panel {
11234
+ grid-column: auto;
11235
+ }
11236
+
11237
+ .skills-scan-strategy {
11238
+ display: grid;
11239
+ gap: 4px;
11240
+ min-height: var(--button-height);
11241
+ padding: 8px 10px;
11242
+ border: 1px solid var(--border-soft);
11243
+ border-radius: var(--radius-lg);
11244
+ background: color-mix(in srgb, var(--surface-muted) 55%, transparent);
11245
+ }
11246
+
11247
+ .skills-scan-toggle {
11248
+ display: flex !important;
11249
+ align-items: flex-start;
11250
+ gap: 9px !important;
11251
+ color: var(--fg) !important;
11252
+ cursor: pointer;
11253
+ }
11254
+
11255
+ .skills-install-grid .skills-scan-toggle > input[type="checkbox"] {
11256
+ width: 16px !important;
11257
+ min-width: 16px !important;
11258
+ max-width: 16px !important;
11259
+ height: 16px !important;
11260
+ min-height: 16px !important;
11261
+ max-height: 16px !important;
11262
+ margin: 1px 0 0 !important;
11263
+ padding: 0 !important;
11264
+ border-radius: 4px !important;
11265
+ accent-color: var(--accent);
11266
+ }
11267
+
11268
+ .skills-scan-toggle > span {
11269
+ display: grid;
11270
+ gap: 2px;
11271
+ min-width: 0;
11272
+ }
11273
+
11274
+ .skills-scan-toggle strong {
11275
+ color: var(--fg);
11276
+ font-size: 11.5px;
11277
+ }
11278
+
11279
+ .skills-scan-toggle small,
11280
+ .skills-scan-strategy > p {
11281
+ margin: 0;
11282
+ color: var(--muted);
11283
+ font-size: 10.5px;
11284
+ line-height: 1.35;
11285
+ }
11286
+
11287
+ .skills-scan-strategy > p {
11288
+ padding-left: 25px;
11289
+ color: var(--faint);
11290
+ }
11291
+
11050
11292
  .skills-advanced-options {
11051
11293
  display: grid;
11052
11294
  gap: 0;
@@ -16704,7 +16946,7 @@ form.dashboard-toolbar > input[type="text"]:focus {
16704
16946
  display: grid;
16705
16947
  grid-column: 1 / -1;
16706
16948
  grid-row: 3;
16707
- grid-template-columns: minmax(0, 1fr);
16949
+ grid-template-columns: minmax(260px, .9fr) minmax(320px, 1.1fr);
16708
16950
  gap: 10px;
16709
16951
  align-items: center;
16710
16952
  min-width: 0;
@@ -16739,6 +16981,67 @@ form.dashboard-toolbar > input[type="text"]:focus {
16739
16981
  margin: 8px 0 0;
16740
16982
  }
16741
16983
 
16984
+ .skills-source-feedback {
16985
+ display: grid;
16986
+ gap: 2px;
16987
+ margin-top: 7px;
16988
+ padding: 7px 9px;
16989
+ border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border-soft));
16990
+ border-radius: var(--radius-md);
16991
+ background: color-mix(in srgb, var(--accent) 7%, var(--surface));
16992
+ }
16993
+
16994
+ .skills-source-feedback strong {
16995
+ color: var(--accent-strong);
16996
+ font-size: 11px;
16997
+ }
16998
+
16999
+ .skills-source-feedback span {
17000
+ color: var(--muted);
17001
+ font-size: 11px;
17002
+ line-height: 1.45;
17003
+ }
17004
+
17005
+ .skills-source-feedback.is-unknown {
17006
+ border-color: color-mix(in srgb, var(--warning) 35%, var(--border-soft));
17007
+ background: color-mix(in srgb, var(--warning) 8%, var(--surface));
17008
+ }
17009
+
17010
+ .skills-source-feedback.is-unknown strong {
17011
+ color: var(--warning);
17012
+ }
17013
+
17014
+ .skills-install-diagnostic {
17015
+ display: grid;
17016
+ gap: 3px;
17017
+ margin-top: 8px;
17018
+ padding: 9px 11px;
17019
+ border: 1px solid color-mix(in srgb, var(--warning) 34%, var(--border-soft));
17020
+ border-radius: var(--radius-md);
17021
+ background: color-mix(in srgb, var(--warning) 8%, var(--surface));
17022
+ }
17023
+
17024
+ .skills-install-diagnostic strong {
17025
+ color: var(--warning);
17026
+ font-size: 12px;
17027
+ }
17028
+
17029
+ .skills-install-diagnostic span {
17030
+ color: var(--fg-muted);
17031
+ font-size: 11px;
17032
+ line-height: 1.5;
17033
+ }
17034
+
17035
+ @media (max-width: 980px) {
17036
+ .skills-page .skills-install-panel .skills-install-bottom-row {
17037
+ grid-template-columns: minmax(0, 1fr);
17038
+ }
17039
+
17040
+ .skills-inline-target {
17041
+ align-items: flex-start;
17042
+ }
17043
+ }
17044
+
16742
17045
  .skills-defaults-panel .bd-section-title {
16743
17046
  margin: 0;
16744
17047
  }
@@ -17947,7 +18250,7 @@ form.dashboard-toolbar > input[type="text"]:focus {
17947
18250
 
17948
18251
  .connector-topic-message-options {
17949
18252
  display: grid;
17950
- grid-template-columns: repeat(3, minmax(0, 1fr));
18253
+ grid-template-columns: repeat(4, minmax(0, 1fr));
17951
18254
  gap: 8px;
17952
18255
  }
17953
18256
 
@@ -17987,6 +18290,13 @@ form.dashboard-toolbar > input[type="text"]:focus {
17987
18290
  font-weight: 600;
17988
18291
  }
17989
18292
  .connector-topic-message-input > small span { color: var(--faint); font-variant-numeric: tabular-nums; }
18293
+ .connector-topic-message-extractors {
18294
+ min-height: 148px;
18295
+ resize: vertical;
18296
+ font-family: var(--font-mono);
18297
+ font-size: 11.5px;
18298
+ line-height: 1.5;
18299
+ }
17990
18300
 
17991
18301
  .connector-topic-message-preview {
17992
18302
  margin: 0;
@@ -25585,27 +25895,542 @@ button.ui-refresh-button.is-loading .ui-action-icon {
25585
25895
  overflow-wrap: anywhere;
25586
25896
  }
25587
25897
 
25588
- @media (max-width: 620px) {
25589
- .skills-installed-block > .sect-head {
25590
- align-items: center;
25591
- flex-wrap: nowrap;
25592
- }
25593
-
25594
- .skills-installed-block > .sect-head .sect-head-hint {
25595
- display: none;
25596
- }
25597
-
25598
- .skills-installed-header-actions {
25599
- margin-left: auto;
25600
- }
25601
-
25602
- .skills-library-toolbar {
25603
- grid-template-columns: minmax(0, 1fr) auto;
25604
- }
25605
-
25606
- .skills-installed-search {
25607
- grid-column: 1 / -1;
25608
- }
25898
+ /* Skill Pack grid */
25899
+ .skills-pack-grid {
25900
+ display: grid;
25901
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
25902
+ gap: 14px;
25903
+ }
25904
+
25905
+ .skills-pack-create-tile {
25906
+ display: flex;
25907
+ flex-direction: column;
25908
+ align-items: center;
25909
+ justify-content: center;
25910
+ gap: 8px;
25911
+ min-height: 140px;
25912
+ border: 2px dashed var(--border);
25913
+ border-radius: 12px;
25914
+ background: transparent;
25915
+ color: var(--muted, #999);
25916
+ cursor: pointer;
25917
+ transition: all 0.15s ease;
25918
+ font-size: 14px;
25919
+ }
25920
+ .skills-pack-create-tile:hover {
25921
+ border-color: var(--accent);
25922
+ color: var(--accent);
25923
+ background: var(--accent-soft);
25924
+ }
25925
+ .skills-pack-create-plus {
25926
+ font-size: 28px;
25927
+ line-height: 1;
25928
+ font-weight: 300;
25929
+ }
25930
+
25931
+ .skills-pack-card {
25932
+ display: flex;
25933
+ flex-direction: column;
25934
+ gap: 10px;
25935
+ padding: 16px;
25936
+ border: 1px solid var(--border, #333);
25937
+ border-radius: 12px;
25938
+ background: var(--surface-raised);
25939
+ transition: border-color 0.15s ease;
25940
+ }
25941
+ .skills-pack-card:hover {
25942
+ border-color: var(--accent);
25943
+ }
25944
+
25945
+ .skills-pack-card-head {
25946
+ display: flex;
25947
+ align-items: flex-start;
25948
+ justify-content: space-between;
25949
+ gap: 8px;
25950
+ }
25951
+ .skills-pack-title {
25952
+ display: flex;
25953
+ flex-direction: column;
25954
+ gap: 2px;
25955
+ min-width: 0;
25956
+ }
25957
+ .skills-pack-title strong {
25958
+ font-size: 15px;
25959
+ white-space: nowrap;
25960
+ overflow: hidden;
25961
+ text-overflow: ellipsis;
25962
+ }
25963
+ .skills-pack-id {
25964
+ font-size: 11px;
25965
+ color: var(--muted);
25966
+ background: var(--surface-muted);
25967
+ padding: 1px 6px;
25968
+ border-radius: 4px;
25969
+ align-self: flex-start;
25970
+ }
25971
+
25972
+ .skills-pack-health {
25973
+ flex-shrink: 0;
25974
+ width: 22px;
25975
+ height: 22px;
25976
+ border-radius: 50%;
25977
+ display: flex;
25978
+ align-items: center;
25979
+ justify-content: center;
25980
+ font-size: 13px;
25981
+ font-weight: 700;
25982
+ }
25983
+ .skills-pack-health-complete {
25984
+ background: rgba(46, 204, 113, 0.15);
25985
+ color: #2ecc71;
25986
+ }
25987
+ .skills-pack-health-missing {
25988
+ background: rgba(231, 76, 60, 0.15);
25989
+ color: #e74c3c;
25990
+ }
25991
+ .skills-pack-health-unassigned {
25992
+ background: rgba(241, 196, 15, 0.15);
25993
+ color: #f1c40f;
25994
+ }
25995
+
25996
+ .skills-pack-desc {
25997
+ font-size: 13px;
25998
+ color: var(--muted, #aaa);
25999
+ margin: 0;
26000
+ display: -webkit-box;
26001
+ -webkit-line-clamp: 2;
26002
+ -webkit-box-orient: vertical;
26003
+ overflow: hidden;
26004
+ }
26005
+
26006
+ .skills-pack-meta {
26007
+ display: flex;
26008
+ gap: 14px;
26009
+ font-size: 12px;
26010
+ color: var(--muted, #999);
26011
+ }
26012
+ .skills-pack-meta-item strong {
26013
+ color: var(--fg);
26014
+ font-size: 14px;
26015
+ margin-right: 2px;
26016
+ }
26017
+
26018
+ .skills-pack-tags {
26019
+ display: flex;
26020
+ flex-wrap: wrap;
26021
+ gap: 4px;
26022
+ }
26023
+ .skills-pack-tag {
26024
+ font-size: 11px;
26025
+ padding: 1px 8px;
26026
+ border-radius: 10px;
26027
+ background: var(--surface-muted);
26028
+ color: var(--muted, #aaa);
26029
+ }
26030
+
26031
+ .skills-pack-refs {
26032
+ display: flex;
26033
+ flex-wrap: wrap;
26034
+ gap: 4px;
26035
+ }
26036
+ .skills-pack-ref-chip {
26037
+ font-size: 11px;
26038
+ padding: 1px 8px;
26039
+ border-radius: 10px;
26040
+ background: var(--accent-soft);
26041
+ color: var(--accent);
26042
+ }
26043
+
26044
+ .skills-pack-missing {
26045
+ font-size: 12px;
26046
+ color: #e74c3c;
26047
+ background: rgba(231, 76, 60, 0.08);
26048
+ padding: 6px 10px;
26049
+ border-radius: 6px;
26050
+ }
26051
+
26052
+ .skills-pack-actions {
26053
+ display: flex;
26054
+ gap: 8px;
26055
+ margin-top: auto;
26056
+ padding-top: 4px;
26057
+ }
26058
+ .skills-pack-actions .bd-button.small {
26059
+ flex: 1;
26060
+ padding: 6px 10px;
26061
+ font-size: 12px;
26062
+ }
26063
+
26064
+ /* Bot assignment drag-and-drop */
26065
+ .skills-bot-assign-layout {
26066
+ display: grid;
26067
+ grid-template-columns: 240px 1fr;
26068
+ gap: 16px;
26069
+ align-items: start;
26070
+ }
26071
+ @media (max-width: 860px) {
26072
+ .skills-bot-assign-layout {
26073
+ grid-template-columns: 1fr;
26074
+ }
26075
+ }
26076
+
26077
+ .skills-bot-palette {
26078
+ position: sticky;
26079
+ top: 12px;
26080
+ padding: 14px;
26081
+ border: 1px solid var(--border, #333);
26082
+ border-radius: 12px;
26083
+ background: var(--surface-raised);
26084
+ max-height: 70vh;
26085
+ overflow-y: auto;
26086
+ }
26087
+ .skills-bot-palette-hint {
26088
+ font-size: 12px;
26089
+ color: var(--muted, #999);
26090
+ margin: 0 0 12px;
26091
+ line-height: 1.4;
26092
+ }
26093
+ .skills-bot-palette-group {
26094
+ margin-bottom: 14px;
26095
+ }
26096
+ .skills-bot-palette-group:last-child {
26097
+ margin-bottom: 0;
26098
+ }
26099
+ .skills-bot-palette-label {
26100
+ display: block;
26101
+ font-size: 11px;
26102
+ text-transform: uppercase;
26103
+ letter-spacing: 0.5px;
26104
+ color: var(--muted, #888);
26105
+ margin-bottom: 6px;
26106
+ }
26107
+ .skills-bot-palette-items {
26108
+ display: flex;
26109
+ flex-wrap: wrap;
26110
+ gap: 6px;
26111
+ }
26112
+
26113
+ .skills-draggable-chip {
26114
+ cursor: grab;
26115
+ user-select: none;
26116
+ transition: transform 0.1s ease, opacity 0.1s ease;
26117
+ }
26118
+ .skills-draggable-chip:hover {
26119
+ transform: translateY(-1px);
26120
+ }
26121
+ .skills-draggable-chip:active {
26122
+ cursor: grabbing;
26123
+ opacity: 0.7;
26124
+ }
26125
+
26126
+ .skills-bot-row.drag-over {
26127
+ background: var(--accent-soft);
26128
+ box-shadow: inset 0 0 0 2px var(--accent);
26129
+ }
26130
+ .skills-bot-row.drag-over td {
26131
+ border-color: var(--accent);
26132
+ }
26133
+
26134
+ .skills-unassign-dropzone {
26135
+ display: grid;
26136
+ grid-template-columns: auto minmax(0, 1fr);
26137
+ gap: 9px;
26138
+ align-items: center;
26139
+ margin: -2px 0 14px;
26140
+ padding: 10px 11px;
26141
+ border: 1px dashed color-mix(in srgb, var(--danger) 58%, var(--border-soft));
26142
+ border-radius: var(--radius-md);
26143
+ background: color-mix(in srgb, var(--danger) 7%, var(--surface-raised));
26144
+ color: var(--danger);
26145
+ transition: border-color 120ms ease, background 120ms ease, box-shadow 120ms ease, transform 120ms ease;
26146
+ }
26147
+ .skills-unassign-dropzone.is-active {
26148
+ border-color: var(--danger);
26149
+ background: color-mix(in srgb, var(--danger) 14%, var(--surface-raised));
26150
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--danger) 32%, transparent);
26151
+ transform: translateY(-1px);
26152
+ }
26153
+ .skills-unassign-dropzone > span:last-child {
26154
+ display: grid;
26155
+ gap: 1px;
26156
+ min-width: 0;
26157
+ }
26158
+ .skills-unassign-dropzone strong {
26159
+ color: var(--danger);
26160
+ font-size: 12px;
26161
+ }
26162
+ .skills-unassign-dropzone small {
26163
+ color: var(--muted);
26164
+ font-size: 10.5px;
26165
+ line-height: 1.35;
26166
+ }
26167
+ .skills-unassign-icon {
26168
+ display: inline-flex;
26169
+ align-items: center;
26170
+ justify-content: center;
26171
+ width: 24px;
26172
+ height: 24px;
26173
+ border-radius: var(--radius-full);
26174
+ background: color-mix(in srgb, var(--danger) 12%, transparent);
26175
+ font-size: 15px;
26176
+ font-weight: 800;
26177
+ }
26178
+
26179
+ .skills-assigned-draggable {
26180
+ display: inline-flex;
26181
+ max-width: 100%;
26182
+ margin: 1px 3px 1px 0;
26183
+ border-radius: var(--radius-full);
26184
+ cursor: grab;
26185
+ user-select: none;
26186
+ vertical-align: middle;
26187
+ transition: box-shadow 120ms ease, opacity 120ms ease, transform 120ms ease;
26188
+ }
26189
+ .skills-assigned-draggable:hover {
26190
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 24%, transparent);
26191
+ transform: translateY(-1px);
26192
+ }
26193
+ .skills-assigned-draggable:active,
26194
+ .skills-assigned-draggable > button:active {
26195
+ cursor: grabbing;
26196
+ }
26197
+ .skills-assigned-draggable.is-dragging {
26198
+ opacity: 0.45;
26199
+ }
26200
+ .skills-assigned-draggable > button {
26201
+ cursor: grab;
26202
+ }
26203
+
26204
+ .skills-bot-row-actions {
26205
+ display: flex;
26206
+ align-items: center;
26207
+ justify-content: flex-end;
26208
+ gap: 8px;
26209
+ min-width: max-content;
26210
+ }
26211
+ .skills-duplicate-feedback {
26212
+ max-width: 180px;
26213
+ color: var(--accent);
26214
+ font-size: 11px;
26215
+ font-weight: 600;
26216
+ line-height: 1.25;
26217
+ text-align: right;
26218
+ }
26219
+
26220
+ @media (prefers-reduced-motion: reduce) {
26221
+ .skills-unassign-dropzone,
26222
+ .skills-assigned-draggable {
26223
+ transition: none !important;
26224
+ transform: none !important;
26225
+ }
26226
+ }
26227
+
26228
+ /* Skill pack editor: truncate descriptions, make list scrollable */
26229
+ .skills-pack-skill-list {
26230
+ max-height: 320px;
26231
+ overflow-y: auto;
26232
+ display: flex;
26233
+ flex-direction: column;
26234
+ gap: 4px;
26235
+ }
26236
+ .skills-pack-skill-item {
26237
+ display: grid;
26238
+ grid-template-columns: auto 1fr;
26239
+ gap: 2px 8px;
26240
+ align-items: start;
26241
+ padding: 6px 8px;
26242
+ border-radius: 6px;
26243
+ transition: background 0.1s;
26244
+ }
26245
+ .skills-pack-skill-item:hover {
26246
+ background: var(--accent-soft);
26247
+ }
26248
+ .skills-pack-skill-item input {
26249
+ margin-top: 3px;
26250
+ }
26251
+ .skills-pack-skill-name {
26252
+ font-weight: 600;
26253
+ font-size: 13px;
26254
+ }
26255
+ .skills-pack-skill-desc {
26256
+ grid-column: 2;
26257
+ font-size: 11px;
26258
+ color: var(--muted, #999);
26259
+ display: -webkit-box;
26260
+ -webkit-line-clamp: 1;
26261
+ -webkit-box-orient: vertical;
26262
+ overflow: hidden;
26263
+ line-height: 1.3;
26264
+ }
26265
+
26266
+ /* Skill library cards: truncate description for even grid */
26267
+ .skills-installed-card .skill-desc,
26268
+ .skills-library-card p {
26269
+ display: -webkit-box;
26270
+ -webkit-line-clamp: 3;
26271
+ -webkit-box-orient: vertical;
26272
+ overflow: hidden;
26273
+ }
26274
+
26275
+ /* Skill / Pack chips */
26276
+ .skills-pack-chip,
26277
+ .skills-skill-chip {
26278
+ display: inline-block;
26279
+ padding: 2px 10px;
26280
+ border-radius: 12px;
26281
+ font-size: 12px;
26282
+ line-height: 1.6;
26283
+ background: var(--surface-muted);
26284
+ color: var(--fg);
26285
+ white-space: nowrap;
26286
+ overflow: hidden;
26287
+ text-overflow: ellipsis;
26288
+ max-width: 160px;
26289
+ }
26290
+ .skills-pack-chip {
26291
+ background: var(--accent-soft);
26292
+ color: var(--accent);
26293
+ }
26294
+
26295
+ /* Draggable chips in palette */
26296
+ .skills-draggable-chip {
26297
+ padding: 4px 12px;
26298
+ font-size: 12px;
26299
+ border: 1px solid var(--border);
26300
+ background: var(--surface-raised);
26301
+ cursor: grab;
26302
+ }
26303
+ .skills-draggable-chip.skills-pack-chip {
26304
+ border-color: rgba(108, 140, 255, 0.3);
26305
+ }
26306
+ .skills-draggable-chip:hover {
26307
+ border-color: var(--accent);
26308
+ background: var(--accent-soft);
26309
+ }
26310
+
26311
+ /* Bot palette: drag hint, search, tag filters */
26312
+ .skills-bot-palette-hint {
26313
+ display: flex;
26314
+ align-items: center;
26315
+ gap: 8px;
26316
+ padding: 10px 12px;
26317
+ background: rgba(108, 140, 255, 0.08);
26318
+ border: 1px solid rgba(108, 140, 255, 0.2);
26319
+ border-radius: 8px;
26320
+ font-size: 12px;
26321
+ color: var(--fg);
26322
+ margin: 0 0 14px;
26323
+ line-height: 1.4;
26324
+ }
26325
+ .skills-drag-icon {
26326
+ font-size: 18px;
26327
+ color: var(--accent);
26328
+ flex-shrink: 0;
26329
+ }
26330
+
26331
+ .skills-bot-palette-search {
26332
+ width: 100%;
26333
+ padding: 6px 10px;
26334
+ margin-bottom: 8px;
26335
+ border: 1px solid var(--border);
26336
+ border-radius: 6px;
26337
+ background: var(--surface-muted);
26338
+ color: var(--fg);
26339
+ font-size: 12px;
26340
+ }
26341
+ .skills-bot-palette-search:focus {
26342
+ outline: none;
26343
+ border-color: var(--accent);
26344
+ }
26345
+
26346
+ .skills-bot-palette-tags {
26347
+ display: flex;
26348
+ flex-wrap: wrap;
26349
+ gap: 4px;
26350
+ margin-bottom: 8px;
26351
+ }
26352
+ .skills-tag-filter {
26353
+ padding: 2px 8px;
26354
+ border-radius: 10px;
26355
+ font-size: 11px;
26356
+ border: 1px solid var(--border);
26357
+ background: transparent;
26358
+ color: var(--muted, #999);
26359
+ cursor: pointer;
26360
+ transition: all 0.1s;
26361
+ }
26362
+ .skills-tag-filter:hover {
26363
+ border-color: var(--accent);
26364
+ color: var(--fg);
26365
+ }
26366
+ .skills-tag-filter.active {
26367
+ background: var(--accent);
26368
+ color: #fff;
26369
+ border-color: var(--accent);
26370
+ }
26371
+
26372
+ /* Skill pack editor: search + select all */
26373
+ .skills-pack-include-head {
26374
+ display: flex;
26375
+ align-items: center;
26376
+ justify-content: space-between;
26377
+ gap: 12px;
26378
+ margin-bottom: 8px;
26379
+ }
26380
+ .skills-pack-include-head label {
26381
+ font-weight: 600;
26382
+ white-space: nowrap;
26383
+ }
26384
+ .skills-pack-skill-search {
26385
+ flex: 1;
26386
+ max-width: 240px;
26387
+ padding: 5px 10px;
26388
+ border: 1px solid var(--border);
26389
+ border-radius: 6px;
26390
+ background: var(--surface-muted);
26391
+ color: var(--fg);
26392
+ font-size: 12px;
26393
+ }
26394
+ .skills-pack-skill-search:focus {
26395
+ outline: none;
26396
+ border-color: var(--accent);
26397
+ }
26398
+ .skills-pack-select-all {
26399
+ display: inline-flex;
26400
+ align-items: center;
26401
+ gap: 6px;
26402
+ font-size: 12px;
26403
+ color: var(--muted, #999);
26404
+ cursor: pointer;
26405
+ margin-bottom: 8px;
26406
+ }
26407
+
26408
+ /* Wider dialog for pack editor */
26409
+ .skills-pack-editor {
26410
+ width: min(560px, 92vw);
26411
+ }
26412
+
26413
+ @media (max-width: 620px) {
26414
+ .skills-installed-block > .sect-head {
26415
+ align-items: center;
26416
+ flex-wrap: nowrap;
26417
+ }
26418
+
26419
+ .skills-installed-block > .sect-head .sect-head-hint {
26420
+ display: none;
26421
+ }
26422
+
26423
+ .skills-installed-header-actions {
26424
+ margin-left: auto;
26425
+ }
26426
+
26427
+ .skills-library-toolbar {
26428
+ grid-template-columns: minmax(0, 1fr) auto;
26429
+ }
26430
+
26431
+ .skills-installed-search {
26432
+ grid-column: 1 / -1;
26433
+ }
25609
26434
 
25610
26435
  .skills-select-all-results {
25611
26436
  grid-column: 1 / -1;
@@ -25805,179 +26630,567 @@ button.ui-refresh-button.is-loading .ui-action-icon {
25805
26630
  grid-template-rows: none;
25806
26631
  }
25807
26632
 
25808
- main:has(.groups-page) .groups-matrix-section {
25809
- height: min(70dvh, 640px);
25810
- min-height: 320px;
25811
- }
26633
+ main:has(.groups-page) .groups-matrix-section {
26634
+ height: min(70dvh, 640px);
26635
+ min-height: 320px;
26636
+ }
26637
+ }
26638
+
26639
+ /* ── Schedule create/edit form modal ─────────────────────────────────────── */
26640
+ .schedule-form-overlay {
26641
+ position: fixed;
26642
+ inset: 0;
26643
+ background: color-mix(in srgb, var(--bg) 72%, transparent);
26644
+ backdrop-filter: blur(3px);
26645
+ display: flex;
26646
+ align-items: center;
26647
+ justify-content: center;
26648
+ z-index: 1000;
26649
+ padding: 24px;
26650
+ }
26651
+
26652
+ .schedule-form-dialog {
26653
+ background: var(--surface);
26654
+ border: 1px solid var(--border-soft);
26655
+ border-radius: 12px;
26656
+ box-shadow: 0 16px 48px color-mix(in srgb, #000 28%, transparent);
26657
+ width: min(560px, 100%);
26658
+ max-height: 90dvh;
26659
+ overflow-y: auto;
26660
+ padding: 24px;
26661
+ }
26662
+
26663
+ .schedule-form-dialog h2 {
26664
+ margin: 0 0 16px;
26665
+ font-size: 18px;
26666
+ }
26667
+
26668
+ .schedule-form {
26669
+ display: flex;
26670
+ flex-direction: column;
26671
+ gap: 14px;
26672
+ }
26673
+
26674
+ .schedule-form-field {
26675
+ display: flex;
26676
+ flex-direction: column;
26677
+ gap: 4px;
26678
+ }
26679
+
26680
+ .schedule-form-label {
26681
+ font-size: 13px;
26682
+ font-weight: 600;
26683
+ color: var(--text);
26684
+ }
26685
+
26686
+ .schedule-form-field input[type="text"],
26687
+ .schedule-form-field textarea {
26688
+ width: 100%;
26689
+ padding: 8px 10px;
26690
+ border: 1px solid var(--border-soft);
26691
+ border-radius: 6px;
26692
+ background: var(--surface);
26693
+ color: var(--text);
26694
+ font-size: 13px;
26695
+ font-family: inherit;
26696
+ }
26697
+
26698
+ .schedule-form-field textarea {
26699
+ resize: vertical;
26700
+ min-height: 80px;
26701
+ }
26702
+
26703
+ .schedule-form-help {
26704
+ font-size: 11px;
26705
+ color: var(--muted);
26706
+ }
26707
+
26708
+ .schedule-form-help-with-count {
26709
+ display: flex;
26710
+ justify-content: space-between;
26711
+ gap: 12px;
26712
+ }
26713
+
26714
+ .schedule-form-help-with-count span {
26715
+ flex: none;
26716
+ }
26717
+
26718
+ .schedule-form-radio-group {
26719
+ display: flex;
26720
+ gap: 16px;
26721
+ flex-wrap: wrap;
26722
+ }
26723
+
26724
+ .schedule-form-radio-group label {
26725
+ display: inline-flex;
26726
+ align-items: center;
26727
+ gap: 6px;
26728
+ font-size: 13px;
26729
+ cursor: pointer;
26730
+ }
26731
+
26732
+ .schedule-form-placement {
26733
+ display: flex;
26734
+ flex-direction: column;
26735
+ gap: 3px;
26736
+ padding: 9px 10px;
26737
+ border: 1px solid var(--border-soft);
26738
+ border-radius: 6px;
26739
+ background: color-mix(in srgb, var(--surface-muted) 46%, transparent);
26740
+ }
26741
+
26742
+ .schedule-form-placement strong {
26743
+ color: var(--text);
26744
+ font-size: 13px;
26745
+ font-weight: 600;
26746
+ }
26747
+
26748
+ .schedule-form-toggle {
26749
+ flex-direction: row !important;
26750
+ align-items: flex-start;
26751
+ gap: 8px;
26752
+ }
26753
+
26754
+ .schedule-form-toggle > span {
26755
+ display: flex;
26756
+ flex-direction: column;
26757
+ gap: 2px;
26758
+ }
26759
+
26760
+ .schedule-form-error {
26761
+ color: var(--danger);
26762
+ font-size: 12px;
26763
+ margin: 0;
26764
+ }
26765
+
26766
+ .schedule-form-actions {
26767
+ display: flex;
26768
+ justify-content: flex-end;
26769
+ gap: 10px;
26770
+ margin-top: 8px;
26771
+ }
26772
+
26773
+ .schedule-form-cancel,
26774
+ .schedule-form-submit {
26775
+ padding: 8px 16px;
26776
+ border-radius: 6px;
26777
+ font-size: 13px;
26778
+ cursor: pointer;
26779
+ border: 1px solid var(--border-soft);
26780
+ }
26781
+
26782
+ .schedule-form-cancel {
26783
+ background: transparent;
26784
+ color: var(--text);
26785
+ }
26786
+
26787
+ .schedule-form-submit {
26788
+ background: var(--accent);
26789
+ color: #fff;
26790
+ border-color: var(--accent);
26791
+ }
26792
+
26793
+ .schedule-form-submit:disabled {
26794
+ opacity: 0.5;
26795
+ cursor: not-allowed;
26796
+ }
26797
+
26798
+ .schedule-edit-button,
26799
+ .schedule-delete-button {
26800
+ min-width: 56px !important;
26801
+ }
26802
+
26803
+ .schedule-delete-button {
26804
+ color: var(--danger) !important;
26805
+ border-color: color-mix(in srgb, var(--danger) 48%, var(--border-soft)) !important;
26806
+ }
26807
+
26808
+ /* --- Skills page: cross-link chips, issue strip, focus highlights --- */
26809
+ /* Chips rendered as <button> for click-through navigation: strip default button chrome */
26810
+ button.skills-pack-chip,
26811
+ button.skills-skill-chip,
26812
+ button.skills-pack-ref-chip,
26813
+ .skills-usage-chip,
26814
+ .skills-missing-skill-chip {
26815
+ border: none;
26816
+ font-family: inherit;
26817
+ cursor: pointer;
26818
+ }
26819
+ button.skills-pack-chip:hover:not(:disabled),
26820
+ button.skills-skill-chip:hover:not(:disabled),
26821
+ button.skills-pack-ref-chip:hover:not(:disabled),
26822
+ .skills-usage-chip:hover:not(:disabled) {
26823
+ filter: brightness(1.2);
26824
+ text-decoration: underline;
26825
+ }
26826
+ button.skills-pack-chip:disabled,
26827
+ button.skills-skill-chip:disabled,
26828
+ button.skills-pack-ref-chip:disabled,
26829
+ .skills-usage-chip:disabled {
26830
+ cursor: default;
26831
+ opacity: 0.7;
26832
+ text-decoration: none;
26833
+ }
26834
+ .skills-chip-missing {
26835
+ background: var(--danger-soft);
26836
+ color: var(--danger);
26837
+ }
26838
+
26839
+ .skills-usage-chips {
26840
+ display: inline-flex;
26841
+ gap: 6px;
26842
+ margin-top: 4px;
26843
+ }
26844
+ .skills-usage-chip {
26845
+ font-size: 11px;
26846
+ padding: 1px 8px;
26847
+ border-radius: 10px;
26848
+ background: var(--surface-muted);
26849
+ color: var(--muted);
26850
+ }
26851
+
26852
+ .skills-missing-skill-chip {
26853
+ font-size: 11px;
26854
+ padding: 1px 8px;
26855
+ margin: 0 2px;
26856
+ border-radius: 10px;
26857
+ background: var(--danger-soft);
26858
+ color: var(--danger);
26859
+ }
26860
+ .skills-missing-skill-chip:hover:not(:disabled) {
26861
+ background: var(--danger-soft);
26862
+ text-decoration: underline;
25812
26863
  }
25813
26864
 
25814
- /* ── Schedule create/edit form modal ─────────────────────────────────────── */
25815
- .schedule-form-overlay {
25816
- position: fixed;
25817
- inset: 0;
25818
- background: color-mix(in srgb, var(--bg) 72%, transparent);
25819
- backdrop-filter: blur(3px);
25820
- display: flex;
26865
+ .skills-issue-strip {
26866
+ display: inline-flex;
26867
+ gap: 8px;
25821
26868
  align-items: center;
25822
- justify-content: center;
25823
- z-index: 1000;
25824
- padding: 24px;
26869
+ flex-wrap: wrap;
25825
26870
  }
25826
-
25827
- .schedule-form-dialog {
25828
- background: var(--surface);
25829
- border: 1px solid var(--border-soft);
26871
+ .skills-issue-badge {
26872
+ font-size: 12px;
26873
+ padding: 3px 10px;
25830
26874
  border-radius: 12px;
25831
- box-shadow: 0 16px 48px color-mix(in srgb, #000 28%, transparent);
25832
- width: min(560px, 100%);
25833
- max-height: 90dvh;
25834
- overflow-y: auto;
25835
- padding: 24px;
26875
+ border: none;
26876
+ font-family: inherit;
26877
+ white-space: nowrap;
25836
26878
  }
25837
-
25838
- .schedule-form-dialog h2 {
25839
- margin: 0 0 16px;
25840
- font-size: 18px;
26879
+ button.skills-issue-badge {
26880
+ cursor: pointer;
25841
26881
  }
25842
-
25843
- .schedule-form {
25844
- display: flex;
25845
- flex-direction: column;
25846
- gap: 14px;
26882
+ button.skills-issue-badge:hover {
26883
+ filter: brightness(1.2);
26884
+ text-decoration: underline;
26885
+ }
26886
+ .skills-issue-warn {
26887
+ background: var(--warning-soft);
26888
+ color: var(--warning);
26889
+ }
26890
+ .skills-issue-info {
26891
+ background: var(--accent-soft);
26892
+ color: var(--accent);
26893
+ }
26894
+ .skills-issue-ok {
26895
+ background: var(--success-soft);
26896
+ color: var(--success);
25847
26897
  }
25848
26898
 
25849
- .schedule-form-field {
25850
- display: flex;
25851
- flex-direction: column;
25852
- gap: 4px;
26899
+ .skills-bot-row-focus {
26900
+ background: var(--accent-soft);
26901
+ outline: 1px solid rgba(108, 140, 255, 0.35);
25853
26902
  }
25854
26903
 
25855
- .schedule-form-label {
25856
- font-size: 13px;
25857
- font-weight: 600;
25858
- color: var(--text);
26904
+ .skills-wizard-target-hint {
26905
+ font-size: 12px;
26906
+ padding: 4px 10px;
26907
+ border-radius: 8px;
26908
+ background: var(--accent-soft);
26909
+ color: var(--accent);
25859
26910
  }
25860
26911
 
25861
- .schedule-form-field input[type="text"],
25862
- .schedule-form-field textarea {
25863
- width: 100%;
25864
- padding: 8px 10px;
25865
- border: 1px solid var(--border-soft);
25866
- border-radius: 6px;
25867
- background: var(--surface);
25868
- color: var(--text);
25869
- font-size: 13px;
26912
+ /* Review round: pack card highlight + library name-filter chip */
26913
+ .skills-pack-card-focus {
26914
+ outline: 1px solid rgba(108, 140, 255, 0.5);
26915
+ background: var(--accent-soft);
26916
+ }
26917
+ .skills-library-filter-chip {
26918
+ font-size: 12px;
26919
+ padding: 2px 10px;
26920
+ border: none;
26921
+ border-radius: 12px;
25870
26922
  font-family: inherit;
26923
+ cursor: pointer;
26924
+ background: var(--accent-soft);
26925
+ color: var(--accent);
26926
+ white-space: nowrap;
26927
+ }
26928
+ .skills-library-filter-chip:hover {
26929
+ filter: brightness(1.2);
26930
+ text-decoration: underline;
25871
26931
  }
25872
26932
 
25873
- .schedule-form-field textarea {
25874
- resize: vertical;
25875
- min-height: 80px;
26933
+ /* Unknown pack-health state (pack API never loaded) */
26934
+ .skills-health-unknown {
26935
+ background: var(--surface-muted);
26936
+ color: var(--muted);
25876
26937
  }
25877
26938
 
25878
- .schedule-form-help {
25879
- font-size: 11px;
25880
- color: var(--text-dim);
26939
+ /* Neutral chip for unresolvable pack refs (pack data not loaded) */
26940
+ .skills-chip-unknown {
26941
+ background: var(--surface-muted);
26942
+ color: var(--muted);
25881
26943
  }
25882
26944
 
25883
- .schedule-form-help-with-count {
26945
+ /* Actionable rows for referenced-but-not-installed skills under a filter */
26946
+ .skills-missing-list {
25884
26947
  display: flex;
25885
- justify-content: space-between;
25886
- gap: 12px;
26948
+ flex-direction: column;
26949
+ gap: 6px;
26950
+ padding: 10px 12px;
26951
+ margin-bottom: 10px;
26952
+ border: 1px dashed var(--border);
26953
+ border-radius: 8px;
25887
26954
  }
25888
-
25889
- .schedule-form-help-with-count span {
25890
- flex: none;
26955
+ .skills-missing-row {
26956
+ display: flex;
26957
+ align-items: center;
26958
+ gap: 10px;
26959
+ }
26960
+ .skills-missing-row-name {
26961
+ font-weight: 600;
26962
+ }
26963
+ .skills-missing-row button {
26964
+ margin-left: auto;
26965
+ font-size: 12px;
26966
+ padding: 2px 10px;
25891
26967
  }
25892
26968
 
25893
- .schedule-form-radio-group {
26969
+ /* --- Skills dialogs (install wizard / pack editor / post-install) ---------
26970
+ These class names shipped with the pack redesign but never had any CSS, so
26971
+ the dialogs rendered as raw UA-styled markup. Styled here against the real
26972
+ design tokens so they match the rest of the dashboard in both themes. */
26973
+ .bd-dialog {
26974
+ border: 1px solid var(--border-soft);
26975
+ border-radius: var(--radius-lg);
26976
+ background: var(--surface-raised);
26977
+ color: var(--fg);
26978
+ padding: 0;
26979
+ max-width: min(560px, calc(100vw - 32px));
26980
+ width: 100%;
26981
+ box-shadow: var(--modal-shadow);
26982
+ }
26983
+ .bd-dialog::backdrop {
26984
+ background: var(--modal-backdrop);
26985
+ }
26986
+ .bd-dialog > form {
25894
26987
  display: flex;
25895
- gap: 16px;
25896
- flex-wrap: wrap;
26988
+ flex-direction: column;
26989
+ gap: 14px;
26990
+ padding: 20px 22px;
26991
+ margin: 0;
25897
26992
  }
25898
-
25899
- .schedule-form-radio-group label {
25900
- display: inline-flex;
25901
- align-items: center;
25902
- gap: 6px;
26993
+ .bd-dialog h3 {
26994
+ margin: 0;
26995
+ font-size: 16px;
26996
+ font-weight: 650;
26997
+ }
26998
+ .bd-dialog label {
26999
+ display: block;
25903
27000
  font-size: 13px;
25904
- cursor: pointer;
27001
+ color: var(--muted);
27002
+ margin-bottom: 6px;
27003
+ }
27004
+ .bd-dialog input[type="text"],
27005
+ .bd-dialog input:not([type]),
27006
+ .bd-dialog textarea {
27007
+ width: 100%;
27008
+ box-sizing: border-box;
27009
+ padding: 8px 11px;
27010
+ border: 1px solid var(--border);
27011
+ border-radius: var(--radius-sm);
27012
+ background: var(--surface);
27013
+ color: var(--fg);
27014
+ font: inherit;
27015
+ }
27016
+ .bd-dialog input:focus-visible,
27017
+ .bd-dialog textarea:focus-visible {
27018
+ outline: 2px solid var(--accent);
27019
+ outline-offset: 1px;
27020
+ }
27021
+ .bd-dialog input:disabled {
27022
+ background: var(--surface-muted);
27023
+ color: var(--muted);
25905
27024
  }
25906
27025
 
25907
- .schedule-form-placement {
27026
+ /* Wizard step rail: was rendering as run-together text "1.选择来源2.填写详情" */
27027
+ .skills-wizard-steps {
25908
27028
  display: flex;
25909
- flex-direction: column;
25910
- gap: 3px;
25911
- padding: 9px 10px;
27029
+ gap: 8px;
27030
+ align-items: center;
27031
+ flex-wrap: wrap;
27032
+ font-size: 12px;
27033
+ color: var(--muted);
27034
+ }
27035
+ .skills-wizard-steps span {
27036
+ padding: 3px 10px;
27037
+ border-radius: var(--radius-full);
27038
+ background: var(--surface-muted);
25912
27039
  border: 1px solid var(--border-soft);
25913
- border-radius: 6px;
25914
- background: color-mix(in srgb, var(--surface-muted) 46%, transparent);
27040
+ white-space: nowrap;
25915
27041
  }
25916
-
25917
- .schedule-form-placement strong {
25918
- color: var(--text);
25919
- font-size: 13px;
27042
+ .skills-wizard-steps span.active {
27043
+ background: var(--accent-soft);
27044
+ border-color: var(--accent);
27045
+ color: var(--accent);
25920
27046
  font-weight: 600;
25921
27047
  }
27048
+ .skills-wizard-source-hint small,
27049
+ .skills-wizard-summary {
27050
+ display: block;
27051
+ font-size: 12px;
27052
+ color: var(--muted);
27053
+ line-height: 1.6;
27054
+ }
27055
+ .skills-wizard-summary p {
27056
+ margin: 2px 0;
27057
+ }
25922
27058
 
25923
- .schedule-form-toggle {
25924
- flex-direction: row !important;
25925
- align-items: flex-start;
27059
+ .skills-dialog-actions {
27060
+ display: flex;
27061
+ justify-content: flex-end;
25926
27062
  gap: 8px;
27063
+ padding-top: 4px;
27064
+ border-top: 1px solid var(--border-soft);
27065
+ margin-top: 2px;
27066
+ }
27067
+ .skills-dialog-actions button,
27068
+ .bd-button {
27069
+ height: var(--button-compact-height);
27070
+ padding: 0 var(--button-padding-x);
27071
+ border: 1px solid var(--border);
27072
+ border-radius: var(--radius-full);
27073
+ background: var(--surface);
27074
+ color: var(--fg);
27075
+ font: inherit;
27076
+ cursor: pointer;
27077
+ }
27078
+ .skills-dialog-actions button:hover:not(:disabled),
27079
+ .bd-button:hover:not(:disabled) {
27080
+ border-color: var(--accent);
27081
+ background: var(--accent-soft);
27082
+ }
27083
+ .skills-dialog-actions button.primary,
27084
+ .bd-button.primary {
27085
+ background: var(--accent);
27086
+ border-color: var(--accent);
27087
+ color: var(--on-accent);
27088
+ }
27089
+ .skills-dialog-actions button.primary:hover:not(:disabled),
27090
+ .bd-button.primary:hover:not(:disabled) {
27091
+ background: var(--accent-strong);
27092
+ border-color: var(--accent-strong);
27093
+ }
27094
+ .skills-dialog-actions button.danger,
27095
+ .bd-button.danger {
27096
+ color: var(--danger);
27097
+ border-color: var(--danger);
27098
+ background: var(--danger-soft);
27099
+ }
27100
+ .skills-dialog-actions button:disabled,
27101
+ .bd-button:disabled {
27102
+ opacity: 0.55;
27103
+ cursor: not-allowed;
27104
+ }
27105
+ .bd-button.small {
27106
+ height: 28px;
27107
+ padding: 0 12px;
27108
+ font-size: 12px;
25927
27109
  }
25928
27110
 
25929
- .schedule-form-toggle > span {
27111
+ /* Candidate / member pick lists inside dialogs */
27112
+ .skills-pack-skill-list {
25930
27113
  display: flex;
25931
27114
  flex-direction: column;
25932
27115
  gap: 2px;
27116
+ max-height: 260px;
27117
+ overflow: auto;
27118
+ padding: 6px;
27119
+ border: 1px solid var(--border-soft);
27120
+ border-radius: var(--radius-sm);
27121
+ background: var(--surface);
25933
27122
  }
25934
-
25935
- .schedule-form-error {
25936
- color: var(--danger, #e5484d);
25937
- font-size: 12px;
25938
- margin: 0;
27123
+ .skills-pack-skill-item {
27124
+ display: flex;
27125
+ align-items: baseline;
27126
+ gap: 8px;
27127
+ padding: 6px 8px;
27128
+ border-radius: var(--radius-sm);
27129
+ margin-bottom: 0;
27130
+ color: var(--fg);
27131
+ cursor: pointer;
27132
+ }
27133
+ .skills-pack-skill-item:hover {
27134
+ background: var(--accent-soft);
27135
+ }
27136
+ .skills-pack-skill-name {
27137
+ font-weight: 600;
27138
+ }
27139
+ .skills-pack-skill-desc {
27140
+ color: var(--muted);
27141
+ overflow: hidden;
27142
+ text-overflow: ellipsis;
27143
+ white-space: nowrap;
25939
27144
  }
25940
-
25941
- .schedule-form-actions {
27145
+ .skills-pack-include-head {
25942
27146
  display: flex;
25943
- justify-content: flex-end;
27147
+ align-items: center;
25944
27148
  gap: 10px;
25945
- margin-top: 8px;
27149
+ justify-content: space-between;
25946
27150
  }
25947
-
25948
- .schedule-form-cancel,
25949
- .schedule-form-submit {
25950
- padding: 8px 16px;
25951
- border-radius: 6px;
25952
- font-size: 13px;
25953
- cursor: pointer;
25954
- border: 1px solid var(--border-soft);
27151
+ .skills-pack-skill-search {
27152
+ max-width: 220px;
25955
27153
  }
25956
-
25957
- .schedule-form-cancel {
25958
- background: transparent;
25959
- color: var(--text);
27154
+ .skills-pack-select-all {
27155
+ display: flex;
27156
+ align-items: center;
27157
+ gap: 6px;
27158
+ font-size: 12px;
27159
+ color: var(--muted);
27160
+ margin: 6px 0;
25960
27161
  }
25961
-
25962
- .schedule-form-submit {
25963
- background: var(--accent);
25964
- color: #fff;
25965
- border-color: var(--accent);
27162
+ .skills-resolved-preview {
27163
+ max-height: 180px;
27164
+ overflow: auto;
27165
+ font-size: 12px;
27166
+ border: 1px solid var(--border-soft);
27167
+ border-radius: var(--radius-sm);
27168
+ padding: 8px 10px;
27169
+ background: var(--surface-muted);
25966
27170
  }
25967
-
25968
- .schedule-form-submit:disabled {
25969
- opacity: 0.5;
25970
- cursor: not-allowed;
27171
+ .skills-resolved-item {
27172
+ display: flex;
27173
+ justify-content: space-between;
27174
+ gap: 10px;
27175
+ padding: 2px 0;
25971
27176
  }
25972
-
25973
- .schedule-edit-button,
25974
- .schedule-delete-button {
25975
- min-width: 56px !important;
27177
+ .skills-install-selection-head {
27178
+ display: flex;
27179
+ justify-content: space-between;
27180
+ align-items: center;
27181
+ gap: 10px;
27182
+ margin-bottom: 6px;
25976
27183
  }
25977
27184
 
25978
- .schedule-delete-button {
25979
- color: var(--danger, #e5484d) !important;
25980
- border-color: color-mix(in srgb, var(--danger, #e5484d) 48%, var(--border-soft)) !important;
27185
+ /* Empty states (pack grid / unavailable) */
27186
+ .skills-empty-state {
27187
+ display: flex;
27188
+ flex-direction: column;
27189
+ align-items: center;
27190
+ gap: 10px;
27191
+ padding: 28px 16px;
27192
+ color: var(--muted);
27193
+ text-align: center;
25981
27194
  }
25982
27195
  .feed-group-auth-overlay {
25983
27196
  position: fixed;
@@ -26136,3 +27349,253 @@ button.ui-refresh-button.is-loading .ui-action-icon {
26136
27349
  background: var(--accent-soft);
26137
27350
  color: var(--accent-strong);
26138
27351
  }
27352
+
27353
+ /* --- 安装 Skill 表单:主输入优先,高级项折叠 ------------------------------
27354
+ 旧布局用两列 grid,左列堆 4 个区块、右列只有「仓库内路径」,主按钮被挤到
27355
+ 右列中部,视觉上与任何字段都不相关。改为单列:来源输入是主角,路径/Ref/
27356
+ 扫描深度收进折叠区,操作按钮回到表单底部。 */
27357
+ .skills-install-panel .skills-install-grid {
27358
+ display: flex;
27359
+ flex-direction: column;
27360
+ gap: 14px;
27361
+ }
27362
+ .skills-install-panel .skills-source-label {
27363
+ display: flex;
27364
+ flex-direction: column;
27365
+ gap: 8px;
27366
+ }
27367
+ .skills-install-panel .skills-source-control input {
27368
+ width: 100%;
27369
+ box-sizing: border-box;
27370
+ }
27371
+
27372
+ /* 来源说明:默认收起,保留主输入的留白;点击问号后再展开完整格式。 */
27373
+ .skills-source-heading {
27374
+ position: relative;
27375
+ display: flex;
27376
+ align-items: center;
27377
+ gap: 6px;
27378
+ min-height: 18px;
27379
+ font-size: 12px;
27380
+ color: var(--muted);
27381
+ }
27382
+ .skills-source-heading > label {
27383
+ font-weight: 700;
27384
+ }
27385
+ .skills-source-help-trigger {
27386
+ display: inline-flex;
27387
+ align-items: center;
27388
+ justify-content: center;
27389
+ width: 16px;
27390
+ height: 16px;
27391
+ min-height: 16px;
27392
+ padding: 0;
27393
+ border: 1px solid var(--border-soft);
27394
+ border-radius: var(--radius-full);
27395
+ background: color-mix(in srgb, var(--muted) 7%, transparent);
27396
+ color: var(--muted);
27397
+ cursor: pointer;
27398
+ font-size: 10px;
27399
+ font-weight: 800;
27400
+ line-height: 1;
27401
+ }
27402
+ .skills-source-help-trigger:hover,
27403
+ .skills-source-help-trigger:focus-visible,
27404
+ .skills-source-help-trigger[aria-expanded="true"] {
27405
+ border-color: color-mix(in srgb, var(--accent) 55%, var(--border-soft));
27406
+ background: color-mix(in srgb, var(--accent) 10%, var(--surface));
27407
+ color: var(--accent);
27408
+ outline: none;
27409
+ }
27410
+ .skills-source-help-trigger:focus-visible {
27411
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
27412
+ }
27413
+ .skills-source-help-popover {
27414
+ position: absolute;
27415
+ left: 0;
27416
+ top: calc(100% + 8px);
27417
+ z-index: 1500;
27418
+ box-sizing: border-box;
27419
+ width: min(580px, calc(100vw - 72px));
27420
+ padding: 16px 18px 16px 24px;
27421
+ border: 1px solid var(--border-soft);
27422
+ border-radius: var(--radius-xl);
27423
+ background: var(--surface-raised);
27424
+ box-shadow: var(--modal-shadow);
27425
+ color: var(--fg);
27426
+ font-size: 12px;
27427
+ font-weight: 500;
27428
+ line-height: 1.5;
27429
+ }
27430
+ .skills-source-help-popover::before {
27431
+ content: "";
27432
+ position: absolute;
27433
+ left: 10px;
27434
+ top: 16px;
27435
+ bottom: 16px;
27436
+ width: 3px;
27437
+ border-radius: var(--radius-full);
27438
+ background: var(--accent);
27439
+ }
27440
+ .skills-source-help-head {
27441
+ display: flex;
27442
+ align-items: flex-start;
27443
+ justify-content: space-between;
27444
+ gap: 16px;
27445
+ padding-bottom: 12px;
27446
+ border-bottom: 1px solid var(--border-soft);
27447
+ }
27448
+ .skills-source-help-head > div {
27449
+ display: grid;
27450
+ gap: 2px;
27451
+ }
27452
+ .skills-source-help-head strong {
27453
+ color: var(--fg);
27454
+ font-size: 13px;
27455
+ }
27456
+ .skills-source-help-head span {
27457
+ color: var(--muted);
27458
+ }
27459
+ .skills-source-help-close {
27460
+ display: inline-flex;
27461
+ align-items: center;
27462
+ justify-content: center;
27463
+ width: 24px;
27464
+ height: 24px;
27465
+ min-height: 24px;
27466
+ flex: none;
27467
+ padding: 0;
27468
+ border: 0;
27469
+ border-radius: var(--radius-full);
27470
+ background: transparent;
27471
+ color: var(--muted);
27472
+ cursor: pointer;
27473
+ font-size: 18px;
27474
+ line-height: 1;
27475
+ }
27476
+ .skills-source-help-close:hover,
27477
+ .skills-source-help-close:focus-visible {
27478
+ background: var(--surface-muted);
27479
+ color: var(--fg);
27480
+ outline: none;
27481
+ }
27482
+ .skills-source-help-list {
27483
+ display: grid;
27484
+ gap: 12px;
27485
+ padding-top: 12px;
27486
+ }
27487
+ .skills-source-help-list section {
27488
+ display: grid;
27489
+ gap: 3px;
27490
+ }
27491
+ .skills-source-help-list section > strong {
27492
+ color: var(--fg);
27493
+ font-size: 12.5px;
27494
+ }
27495
+ .skills-source-help-list section > span {
27496
+ color: var(--muted);
27497
+ }
27498
+ .skills-source-help-list code {
27499
+ display: block;
27500
+ width: fit-content;
27501
+ max-width: 100%;
27502
+ margin-top: 2px;
27503
+ padding: 4px 7px;
27504
+ border: 1px solid var(--border-soft);
27505
+ border-radius: var(--radius-sm);
27506
+ background: var(--surface-muted);
27507
+ color: var(--fg);
27508
+ font-size: 11px;
27509
+ font-weight: 600;
27510
+ line-height: 1.45;
27511
+ overflow-wrap: anywhere;
27512
+ white-space: normal;
27513
+ }
27514
+
27515
+ /* 高级选项折叠区 */
27516
+ .skills-install-advanced {
27517
+ border: 1px solid var(--border-soft);
27518
+ border-radius: var(--radius-sm);
27519
+ background: var(--surface-muted);
27520
+ }
27521
+ .skills-install-advanced > summary {
27522
+ cursor: pointer;
27523
+ padding: 8px 12px;
27524
+ font-size: 13px;
27525
+ color: var(--muted);
27526
+ list-style-position: inside;
27527
+ }
27528
+ .skills-install-advanced[open] > summary {
27529
+ border-bottom: 1px solid var(--border-soft);
27530
+ color: var(--fg);
27531
+ }
27532
+ .skills-install-advanced-body {
27533
+ display: grid;
27534
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
27535
+ gap: 12px;
27536
+ padding: 12px;
27537
+ }
27538
+ .skills-install-advanced-body .skills-install-field {
27539
+ display: flex;
27540
+ flex-direction: column;
27541
+ gap: 4px;
27542
+ font-size: 13px;
27543
+ }
27544
+ .skills-install-advanced-body .skills-install-field input {
27545
+ width: 100%;
27546
+ box-sizing: border-box;
27547
+ padding: 7px 10px;
27548
+ border: 1px solid var(--border);
27549
+ border-radius: var(--radius-sm);
27550
+ background: var(--surface);
27551
+ color: var(--fg);
27552
+ font: inherit;
27553
+ }
27554
+ .skills-install-advanced-body small {
27555
+ color: var(--muted);
27556
+ font-size: 11.5px;
27557
+ }
27558
+ .skills-scan-toggle {
27559
+ display: flex;
27560
+ align-items: flex-start;
27561
+ gap: 8px;
27562
+ font-size: 13px;
27563
+ }
27564
+ .skills-scan-toggle > span {
27565
+ display: flex;
27566
+ flex-direction: column;
27567
+ gap: 2px;
27568
+ }
27569
+
27570
+ /* 操作行:次要入口在左,主操作在右下 */
27571
+ .skills-install-panel .skills-install-actions {
27572
+ display: flex;
27573
+ align-items: center;
27574
+ justify-content: space-between;
27575
+ gap: 10px;
27576
+ padding-top: 2px;
27577
+ }
27578
+ .skills-local-discovery-link {
27579
+ border: none;
27580
+ background: none;
27581
+ padding: 0;
27582
+ font: inherit;
27583
+ font-size: 13px;
27584
+ color: var(--accent);
27585
+ cursor: pointer;
27586
+ text-decoration: underline;
27587
+ }
27588
+ .skills-install-panel .skills-install-actions .primary {
27589
+ height: var(--button-compact-height);
27590
+ padding: 0 var(--button-padding-x);
27591
+ border: 1px solid var(--accent);
27592
+ border-radius: var(--radius-full);
27593
+ background: var(--accent);
27594
+ color: var(--on-accent);
27595
+ font: inherit;
27596
+ cursor: pointer;
27597
+ }
27598
+ .skills-install-panel .skills-install-actions .primary:disabled {
27599
+ opacity: 0.55;
27600
+ cursor: not-allowed;
27601
+ }