botmux 2.88.1 → 2.90.0

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 (217) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +3 -3
  3. package/dist/bot-registry.d.ts +2 -0
  4. package/dist/bot-registry.d.ts.map +1 -1
  5. package/dist/bot-registry.js +4 -0
  6. package/dist/bot-registry.js.map +1 -1
  7. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  8. package/dist/cli/dashboard-endpoint.js +9 -3
  9. package/dist/cli/dashboard-endpoint.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +11 -3
  12. package/dist/cli.js.map +1 -1
  13. package/dist/core/command-handler.d.ts.map +1 -1
  14. package/dist/core/command-handler.js +9 -1
  15. package/dist/core/command-handler.js.map +1 -1
  16. package/dist/core/dashboard-command/groups.d.ts +20 -0
  17. package/dist/core/dashboard-command/groups.d.ts.map +1 -0
  18. package/dist/core/dashboard-command/groups.js +52 -0
  19. package/dist/core/dashboard-command/groups.js.map +1 -0
  20. package/dist/core/dashboard-command/index.d.ts +30 -0
  21. package/dist/core/dashboard-command/index.d.ts.map +1 -0
  22. package/dist/core/dashboard-command/index.js +81 -0
  23. package/dist/core/dashboard-command/index.js.map +1 -0
  24. package/dist/core/dashboard-command/overview.d.ts +29 -0
  25. package/dist/core/dashboard-command/overview.d.ts.map +1 -0
  26. package/dist/core/dashboard-command/overview.js +61 -0
  27. package/dist/core/dashboard-command/overview.js.map +1 -0
  28. package/dist/core/dashboard-command/owner-gate.d.ts +41 -0
  29. package/dist/core/dashboard-command/owner-gate.d.ts.map +1 -0
  30. package/dist/core/dashboard-command/owner-gate.js +40 -0
  31. package/dist/core/dashboard-command/owner-gate.js.map +1 -0
  32. package/dist/core/dashboard-command/schedules.d.ts +20 -0
  33. package/dist/core/dashboard-command/schedules.d.ts.map +1 -0
  34. package/dist/core/dashboard-command/schedules.js +47 -0
  35. package/dist/core/dashboard-command/schedules.js.map +1 -0
  36. package/dist/core/dashboard-command/sessions.d.ts +22 -0
  37. package/dist/core/dashboard-command/sessions.d.ts.map +1 -0
  38. package/dist/core/dashboard-command/sessions.js +43 -0
  39. package/dist/core/dashboard-command/sessions.js.map +1 -0
  40. package/dist/core/dashboard-command/settings.d.ts +21 -0
  41. package/dist/core/dashboard-command/settings.d.ts.map +1 -0
  42. package/dist/core/dashboard-command/settings.js +55 -0
  43. package/dist/core/dashboard-command/settings.js.map +1 -0
  44. package/dist/core/dashboard-command/stub.d.ts +16 -0
  45. package/dist/core/dashboard-command/stub.d.ts.map +1 -0
  46. package/dist/core/dashboard-command/stub.js +28 -0
  47. package/dist/core/dashboard-command/stub.js.map +1 -0
  48. package/dist/core/dashboard-command/workflows.d.ts +20 -0
  49. package/dist/core/dashboard-command/workflows.d.ts.map +1 -0
  50. package/dist/core/dashboard-command/workflows.js +45 -0
  51. package/dist/core/dashboard-command/workflows.js.map +1 -0
  52. package/dist/core/passthrough-commands.d.ts.map +1 -1
  53. package/dist/core/passthrough-commands.js +1 -1
  54. package/dist/core/passthrough-commands.js.map +1 -1
  55. package/dist/core/skills/discovery.d.ts +16 -0
  56. package/dist/core/skills/discovery.d.ts.map +1 -1
  57. package/dist/core/skills/discovery.js +48 -2
  58. package/dist/core/skills/discovery.js.map +1 -1
  59. package/dist/core/worker-pool.d.ts.map +1 -1
  60. package/dist/core/worker-pool.js +9 -2
  61. package/dist/core/worker-pool.js.map +1 -1
  62. package/dist/daemon-internal-client-wrapper.d.ts +41 -0
  63. package/dist/daemon-internal-client-wrapper.d.ts.map +1 -0
  64. package/dist/daemon-internal-client-wrapper.js +65 -0
  65. package/dist/daemon-internal-client-wrapper.js.map +1 -0
  66. package/dist/dashboard/aggregator.d.ts +12 -0
  67. package/dist/dashboard/aggregator.d.ts.map +1 -1
  68. package/dist/dashboard/aggregator.js +16 -0
  69. package/dist/dashboard/aggregator.js.map +1 -1
  70. package/dist/dashboard/auth.d.ts +7 -0
  71. package/dist/dashboard/auth.d.ts.map +1 -1
  72. package/dist/dashboard/auth.js +21 -0
  73. package/dist/dashboard/auth.js.map +1 -1
  74. package/dist/dashboard/card-model-types.d.ts +50 -0
  75. package/dist/dashboard/card-model-types.d.ts.map +1 -0
  76. package/dist/dashboard/card-model-types.js +9 -0
  77. package/dist/dashboard/card-model-types.js.map +1 -0
  78. package/dist/dashboard/daemon-internal-api.d.ts +90 -0
  79. package/dist/dashboard/daemon-internal-api.d.ts.map +1 -0
  80. package/dist/dashboard/daemon-internal-api.js +534 -0
  81. package/dist/dashboard/daemon-internal-api.js.map +1 -0
  82. package/dist/dashboard/daemon-internal-auth.d.ts +124 -0
  83. package/dist/dashboard/daemon-internal-auth.d.ts.map +1 -0
  84. package/dist/dashboard/daemon-internal-auth.js +188 -0
  85. package/dist/dashboard/daemon-internal-auth.js.map +1 -0
  86. package/dist/dashboard/daemon-internal-client.d.ts +67 -0
  87. package/dist/dashboard/daemon-internal-client.d.ts.map +1 -0
  88. package/dist/dashboard/daemon-internal-client.js +157 -0
  89. package/dist/dashboard/daemon-internal-client.js.map +1 -0
  90. package/dist/dashboard/dashboard-admins.d.ts +8 -0
  91. package/dist/dashboard/dashboard-admins.d.ts.map +1 -0
  92. package/dist/dashboard/dashboard-admins.js +15 -0
  93. package/dist/dashboard/dashboard-admins.js.map +1 -0
  94. package/dist/dashboard/federation-spoke-api.d.ts +3 -0
  95. package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
  96. package/dist/dashboard/federation-spoke-api.js +11 -8
  97. package/dist/dashboard/federation-spoke-api.js.map +1 -1
  98. package/dist/dashboard/groups-action-helpers.d.ts +69 -0
  99. package/dist/dashboard/groups-action-helpers.d.ts.map +1 -0
  100. package/dist/dashboard/groups-action-helpers.js +141 -0
  101. package/dist/dashboard/groups-action-helpers.js.map +1 -0
  102. package/dist/dashboard/groups-card-model.d.ts +120 -0
  103. package/dist/dashboard/groups-card-model.d.ts.map +1 -0
  104. package/dist/dashboard/groups-card-model.js +175 -0
  105. package/dist/dashboard/groups-card-model.js.map +1 -0
  106. package/dist/dashboard/schedule-card-model.d.ts +172 -0
  107. package/dist/dashboard/schedule-card-model.d.ts.map +1 -0
  108. package/dist/dashboard/schedule-card-model.js +290 -0
  109. package/dist/dashboard/schedule-card-model.js.map +1 -0
  110. package/dist/dashboard/session-card-model.d.ts +83 -0
  111. package/dist/dashboard/session-card-model.d.ts.map +1 -0
  112. package/dist/dashboard/session-card-model.js +196 -0
  113. package/dist/dashboard/session-card-model.js.map +1 -0
  114. package/dist/dashboard/settings-card-model.d.ts +73 -0
  115. package/dist/dashboard/settings-card-model.d.ts.map +1 -0
  116. package/dist/dashboard/settings-card-model.js +94 -0
  117. package/dist/dashboard/settings-card-model.js.map +1 -0
  118. package/dist/dashboard/settings-owner-resolver.d.ts +32 -0
  119. package/dist/dashboard/settings-owner-resolver.d.ts.map +1 -0
  120. package/dist/dashboard/settings-owner-resolver.js +43 -0
  121. package/dist/dashboard/settings-owner-resolver.js.map +1 -0
  122. package/dist/dashboard/settings-write-applier.d.ts +84 -0
  123. package/dist/dashboard/settings-write-applier.d.ts.map +1 -0
  124. package/dist/dashboard/settings-write-applier.js +119 -0
  125. package/dist/dashboard/settings-write-applier.js.map +1 -0
  126. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  127. package/dist/dashboard/web/i18n.js +60 -2
  128. package/dist/dashboard/web/i18n.js.map +1 -1
  129. package/dist/dashboard/web/insights.d.ts.map +1 -1
  130. package/dist/dashboard/web/insights.js +514 -68
  131. package/dist/dashboard/web/insights.js.map +1 -1
  132. package/dist/dashboard/web/skills.d.ts.map +1 -1
  133. package/dist/dashboard/web/skills.js +1 -1
  134. package/dist/dashboard/web/skills.js.map +1 -1
  135. package/dist/dashboard/web/whiteboards.js +3 -3
  136. package/dist/dashboard/workflow-api.d.ts.map +1 -1
  137. package/dist/dashboard/workflow-api.js +38 -119
  138. package/dist/dashboard/workflow-api.js.map +1 -1
  139. package/dist/dashboard/workflow-card-model.d.ts +127 -0
  140. package/dist/dashboard/workflow-card-model.d.ts.map +1 -0
  141. package/dist/dashboard/workflow-card-model.js +186 -0
  142. package/dist/dashboard/workflow-card-model.js.map +1 -0
  143. package/dist/dashboard/workflows-action-helpers.d.ts +105 -0
  144. package/dist/dashboard/workflows-action-helpers.d.ts.map +1 -0
  145. package/dist/dashboard/workflows-action-helpers.js +196 -0
  146. package/dist/dashboard/workflows-action-helpers.js.map +1 -0
  147. package/dist/dashboard-web/app.js +883 -795
  148. package/dist/dashboard-web/style.css +105 -3
  149. package/dist/dashboard.js +196 -269
  150. package/dist/dashboard.js.map +1 -1
  151. package/dist/i18n/en.d.ts.map +1 -1
  152. package/dist/i18n/en.js +266 -0
  153. package/dist/i18n/en.js.map +1 -1
  154. package/dist/i18n/zh.d.ts.map +1 -1
  155. package/dist/i18n/zh.js +266 -0
  156. package/dist/i18n/zh.js.map +1 -1
  157. package/dist/im/lark/card-builder.d.ts +2 -0
  158. package/dist/im/lark/card-builder.d.ts.map +1 -1
  159. package/dist/im/lark/card-builder.js +2 -1
  160. package/dist/im/lark/card-builder.js.map +1 -1
  161. package/dist/im/lark/card-handler.d.ts +54 -2
  162. package/dist/im/lark/card-handler.d.ts.map +1 -1
  163. package/dist/im/lark/card-handler.js +127 -1
  164. package/dist/im/lark/card-handler.js.map +1 -1
  165. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  166. package/dist/im/lark/event-dispatcher.js +22 -0
  167. package/dist/im/lark/event-dispatcher.js.map +1 -1
  168. package/dist/im/lark/groups-card.d.ts +90 -0
  169. package/dist/im/lark/groups-card.d.ts.map +1 -0
  170. package/dist/im/lark/groups-card.js +832 -0
  171. package/dist/im/lark/groups-card.js.map +1 -0
  172. package/dist/im/lark/overview-card.d.ts +101 -0
  173. package/dist/im/lark/overview-card.d.ts.map +1 -0
  174. package/dist/im/lark/overview-card.js +475 -0
  175. package/dist/im/lark/overview-card.js.map +1 -0
  176. package/dist/im/lark/schedules-card.d.ts +96 -0
  177. package/dist/im/lark/schedules-card.d.ts.map +1 -0
  178. package/dist/im/lark/schedules-card.js +892 -0
  179. package/dist/im/lark/schedules-card.js.map +1 -0
  180. package/dist/im/lark/sessions-card.d.ts +117 -0
  181. package/dist/im/lark/sessions-card.d.ts.map +1 -0
  182. package/dist/im/lark/sessions-card.js +870 -0
  183. package/dist/im/lark/sessions-card.js.map +1 -0
  184. package/dist/im/lark/settings-card.d.ts +125 -0
  185. package/dist/im/lark/settings-card.d.ts.map +1 -0
  186. package/dist/im/lark/settings-card.js +433 -0
  187. package/dist/im/lark/settings-card.js.map +1 -0
  188. package/dist/im/lark/workflows-card.d.ts +102 -0
  189. package/dist/im/lark/workflows-card.d.ts.map +1 -0
  190. package/dist/im/lark/workflows-card.js +737 -0
  191. package/dist/im/lark/workflows-card.js.map +1 -0
  192. package/dist/services/insight/classify.d.ts +2 -0
  193. package/dist/services/insight/classify.d.ts.map +1 -1
  194. package/dist/services/insight/classify.js +25 -0
  195. package/dist/services/insight/classify.js.map +1 -1
  196. package/dist/services/insight/claude-span-reader.d.ts.map +1 -1
  197. package/dist/services/insight/claude-span-reader.js +7 -4
  198. package/dist/services/insight/claude-span-reader.js.map +1 -1
  199. package/dist/services/insight/report.d.ts.map +1 -1
  200. package/dist/services/insight/report.js +102 -23
  201. package/dist/services/insight/report.js.map +1 -1
  202. package/dist/services/insight/subagent-reader.d.ts +19 -0
  203. package/dist/services/insight/subagent-reader.d.ts.map +1 -0
  204. package/dist/services/insight/subagent-reader.js +111 -0
  205. package/dist/services/insight/subagent-reader.js.map +1 -0
  206. package/dist/services/insight/types.d.ts +43 -0
  207. package/dist/services/insight/types.d.ts.map +1 -1
  208. package/dist/services/insight/types.js.map +1 -1
  209. package/dist/skills/definitions.d.ts +8 -0
  210. package/dist/skills/definitions.d.ts.map +1 -1
  211. package/dist/skills/definitions.js +8 -2
  212. package/dist/skills/definitions.js.map +1 -1
  213. package/dist/skills/installer.d.ts +15 -0
  214. package/dist/skills/installer.d.ts.map +1 -1
  215. package/dist/skills/installer.js +39 -1
  216. package/dist/skills/installer.js.map +1 -1
  217. package/package.json +1 -1
@@ -7006,6 +7006,10 @@ body.cp-fx-slice main { animation: cp-fx-slice 0.32s steps(2, end); }
7006
7006
  .insights-page .hbfill { height: 100%; background: linear-gradient(90deg, var(--danger-soft), var(--bad)); border-radius: 6px; min-width: 3px; transform-origin: left; animation: insight-bar-grow .55s ease both; }
7007
7007
  .insights-page .hbval { font-size: 12px; color: var(--mut); text-align: right; white-space: nowrap; }
7008
7008
  .insights-page .hbval small { color: var(--ins-faint); font-size: 10px; margin-left: 5px; }
7009
+ .insights-page .ihist-jump { background: transparent; border: 0; color: var(--acc); font: inherit; font-size: 11px; cursor: pointer; padding: 0 0 0 8px; white-space: nowrap; }
7010
+ .insights-page .ihist-jump:hover { text-decoration: underline; }
7011
+ .insights-page .hbrow-click { appearance: none; -webkit-appearance: none; border: 0; background: transparent; font: inherit; color: inherit; cursor: pointer; }
7012
+ .insights-page .hbrow-click:hover { background: var(--ins-inner); }
7009
7013
 
7010
7014
  /* top-level tabs (总览 / 会话 / 分布 / 热点) — mirrors .detailtabbar */
7011
7015
  .insights-page .insight-tabs { display: flex; gap: 6px; border-bottom: 1px solid var(--line); margin: 4px 0 16px; }
@@ -7019,10 +7023,20 @@ body.cp-fx-slice main { animation: cp-fx-slice 0.32s steps(2, end); }
7019
7023
  .insights-page .insight-panel[hidden] { display: none; }
7020
7024
 
7021
7025
  /* filter-bar additions: project/time selects, analyzable toggle, clear */
7022
- .insights-page .ins-select {
7023
- background: var(--ins-inner); color: var(--fg); border: 1px solid var(--line); border-radius: 8px;
7024
- padding: 6px 10px; font: inherit; font-size: 12px; max-width: 220px; cursor: pointer;
7026
+ /* `select.ins-select` (not just `.ins-select`) so this beats the theme-layer
7027
+ `:root[data-theme="dark"] .page :where(...select...)` rule (same specificity,
7028
+ defined earlier) that rule uses a `background:` shorthand which otherwise
7029
+ wipes our chevron and leaves a pill indistinguishable from the filter buttons.
7030
+ appearance:none (global) already removed the native arrow, so draw it here. */
7031
+ .page.insights-page select.ins-select {
7032
+ color: var(--fg); border: 1px solid var(--line); border-radius: 8px;
7033
+ min-height: 0; padding: 6px 28px 6px 10px; font: inherit; font-size: 12px; max-width: 220px; cursor: pointer;
7034
+ background-color: var(--ins-inner);
7035
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23808a99' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M3 4.5 6 7.5 9 4.5'/%3E%3C/svg%3E");
7036
+ background-repeat: no-repeat;
7037
+ background-position: right 10px center;
7025
7038
  }
7039
+ .page.insights-page select.ins-select:hover { border-color: var(--mut); }
7026
7040
  .insights-page .ins-toggle { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--mut); cursor: pointer; white-space: nowrap; }
7027
7041
  .insights-page .ins-toggle input { cursor: pointer; }
7028
7042
  .insights-page .ins-clear {
@@ -7037,8 +7051,79 @@ body.cp-fx-slice main { animation: cp-fx-slice 0.32s steps(2, end); }
7037
7051
  .insights-page .hot-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 14px; align-items: start; }
7038
7052
  .insights-page .ihist-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
7039
7053
  .insights-page .ihist-head h3 { margin: 0; }
7054
+ .insights-page .trend-block { grid-column: 1 / -1; }
7055
+ .insights-page .trend { display: flex; align-items: flex-end; gap: 2px; height: 60px; padding-top: 8px; }
7056
+ .insights-page .trendbar { flex: 1 1 0; min-width: 2px; min-height: 2px; background: var(--acc); opacity: .8; border-radius: 2px 2px 0 0; transition: height .4s ease; }
7057
+ .insights-page .trendbar:hover { opacity: 1; }
7040
7058
  .insights-page .hot-sessions, .insights-page .hot-note { grid-column: 1 / -1; }
7041
7059
  .insights-page .hot-note { margin-top: 2px; }
7060
+ .insights-page .insight-disclosure { margin-top: 16px; color: var(--ins-faint); font-size: 11px; line-height: 1.55; border-top: 1px solid var(--line); padding-top: 10px; }
7061
+ /* recurrence hotspots (file / command / error) with expandable contributing sessions */
7062
+ .insights-page .hotlist { display: grid; gap: 2px; }
7063
+ .insights-page .hotitem.open { background: var(--ins-recess); border-radius: 7px; }
7064
+ .insights-page .hotrow { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 10px; align-items: center; width: 100%; appearance: none; -webkit-appearance: none; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; padding: 6px 8px; border-radius: 7px; }
7065
+ .insights-page .hotrow:hover { background: var(--ins-inner); }
7066
+ .insights-page .hotlabel { font-size: 12px; font-family: var(--mono); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
7067
+ .insights-page .hotmeta { font-size: 11px; color: var(--mut); white-space: nowrap; }
7068
+ .insights-page .hotmeta .bad { color: var(--bad); }
7069
+ .insights-page .hotses { font-size: 11px; color: var(--acc); white-space: nowrap; }
7070
+ .insights-page .hot-sess { display: flex; flex-wrap: wrap; gap: 5px; padding: 2px 8px 9px; }
7071
+ .insights-page .hot-sesslink { appearance: none; -webkit-appearance: none; border: 1px solid var(--line); background: var(--ins-inner); color: var(--fg); border-radius: 6px; padding: 3px 9px; font-size: 11px; cursor: pointer; max-width: 260px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
7072
+ .insights-page .hot-sesslink:hover { border-color: var(--acc); color: var(--acc); }
7073
+ /* ⌘K command palette */
7074
+ .insights-page .insight-head-acts { display: flex; align-items: center; gap: 8px; }
7075
+ .insights-page .insight-palette { position: fixed; inset: 0; z-index: 60; display: flex; align-items: flex-start; justify-content: center; }
7076
+ .insights-page .insight-palette[hidden] { display: none; }
7077
+ .insights-page .insight-palette .modal-backdrop { position: fixed; inset: 0; background: rgba(0, 0, 0, .5); }
7078
+ .insights-page .palette-panel { position: relative; margin-top: 12vh; width: min(560px, 92vw); background: var(--panel); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow); overflow: hidden; }
7079
+ .insights-page .palette-input { width: 100%; box-sizing: border-box; background: transparent; border: 0; border-bottom: 1px solid var(--line); color: var(--fg); font: inherit; font-size: 15px; padding: 14px 16px; outline: none; }
7080
+ .insights-page .palette-list { max-height: 50vh; overflow: auto; padding: 6px; display: grid; gap: 2px; }
7081
+ .insights-page .palette-item { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; width: 100%; appearance: none; -webkit-appearance: none; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; padding: 9px 12px; border-radius: 8px; }
7082
+ .insights-page .palette-item.on, .insights-page .palette-item:hover { background: var(--accent-soft); }
7083
+ .insights-page .pal-label { font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
7084
+ .insights-page .pal-sub { font-size: 11px; color: var(--mut); white-space: nowrap; flex: 0 0 auto; }
7085
+ .insights-page .palette-empty { padding: 16px; text-align: center; }
7086
+ /* 行为流 (Flow) tab */
7087
+ .insights-page .flow-sub { font-size: 12px; margin: -4px 0 12px; }
7088
+ .insights-page .flow-pipe-block { margin-bottom: 14px; }
7089
+ .insights-page .flow-pipe { display: flex; align-items: stretch; flex-wrap: wrap; gap: 6px; }
7090
+ .insights-page .flow-node { flex: 1 1 0; min-width: 110px; display: flex; flex-direction: column; gap: 3px; padding: 12px 14px; background: var(--ins-inner); border: 1px solid var(--line); border-radius: 10px; }
7091
+ .insights-page .flow-node strong { font-size: 13px; }
7092
+ .insights-page .flow-node .flow-n { font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; }
7093
+ .insights-page .flow-node .flow-n em, .insights-page .flow-node .flow-t em { font-style: normal; color: var(--mut); font-weight: 400; font-size: 12px; }
7094
+ .insights-page .flow-node .flow-t { font-size: 12px; color: var(--mut); font-variant-numeric: tabular-nums; }
7095
+ .insights-page .flow-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
7096
+ .insights-page .flow-arrow { align-self: center; color: var(--mut); font-size: 16px; flex: 0 0 auto; }
7097
+ .insights-page .flow-bhead { display: grid; grid-template-columns: 84px 1fr 1fr; gap: 10px; font-size: 11px; color: var(--mut); padding: 0 0 6px; }
7098
+ .insights-page .flow-bars { display: grid; gap: 8px; }
7099
+ .insights-page .flow-brow { display: grid; grid-template-columns: 84px 1fr 1fr; gap: 10px; align-items: center; }
7100
+ .insights-page .flow-blabel { font-size: 12px; display: flex; align-items: center; gap: 6px; }
7101
+ .insights-page .flow-blabel i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; flex: 0 0 auto; }
7102
+ .insights-page .flow-btrack { position: relative; height: 16px; background: var(--ins-recess); border-radius: 5px; overflow: hidden; display: flex; align-items: center; }
7103
+ .insights-page .flow-bfill { position: absolute; left: 0; top: 0; height: 100%; border-radius: 5px; opacity: .85; }
7104
+ .insights-page .flow-btrack em { position: relative; font-style: normal; font-size: 11px; color: var(--fg); margin-left: 7px; font-variant-numeric: tabular-nums; }
7105
+ .insights-page .flow-bfill.phase-research { background: var(--ph-research); }
7106
+ .insights-page .flow-bfill.phase-edit { background: var(--ph-edit); }
7107
+ .insights-page .flow-bfill.phase-run { background: var(--ph-run); }
7108
+ .insights-page .flow-bfill.phase-delegate { background: var(--ph-delegate); }
7109
+ .insights-page .flow-bfill.phase-discuss { background: var(--ph-discuss); }
7110
+ .insights-page .flow-rhythm { display: grid; gap: 4px; max-height: 420px; overflow: auto; }
7111
+ .insights-page .flow-sess { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 2fr) 56px; gap: 10px; align-items: center; width: 100%; appearance: none; -webkit-appearance: none; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; padding: 6px 8px; border-radius: 6px; }
7112
+ .insights-page .flow-sess:hover { background: var(--ins-inner); }
7113
+ .insights-page .flow-stitle { font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
7114
+ .insights-page .flow-sess .mph { flex: 1; height: 11px; }
7115
+ .insights-page .flow-stime { font-size: 11px; color: var(--mut); text-align: right; font-variant-numeric: tabular-nums; }
7116
+ /* sub-agent swim-lanes (detail view) */
7117
+ .insights-page .subagent-block .ins-hint { margin: -2px 0 10px; }
7118
+ .insights-page .sublanes { display: grid; gap: 8px; }
7119
+ .insights-page .sublane { display: grid; gap: 5px; padding: 9px 12px; background: var(--ins-inner); border: 1px solid var(--line); border-radius: 8px; border-left: 3px solid var(--ph-delegate); }
7120
+ .insights-page .sublane.bad { border-left-color: var(--bad); }
7121
+ .insights-page .sublane-head { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
7122
+ .insights-page .sublane-type { flex: 0 0 auto; font-size: 11px; font-weight: 600; color: var(--acc); background: var(--accent-soft); padding: 1px 7px; border-radius: 999px; }
7123
+ .insights-page .sublane-task { font-size: 12px; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
7124
+ .insights-page .sublane .mph { height: 8px; }
7125
+ .insights-page .sublane-stats { display: flex; gap: 14px; font-size: 11px; color: var(--mut); font-variant-numeric: tabular-nums; }
7126
+ .insights-page .sublane-stats .bad { color: var(--bad); }
7042
7127
 
7043
7128
  /* Sessions tab: full-width list ⇆ full-width detail (mirrors ASI 会话, replaces
7044
7129
  the cramped master-detail side panel) */
@@ -7062,6 +7147,23 @@ body.cp-fx-slice main { animation: cp-fx-slice 0.32s steps(2, end); }
7062
7147
  .insights-page .slist.wide .srow { grid-template-columns: 1fr; }
7063
7148
  .insights-page .slist.wide .srstats { justify-content: flex-start; flex-wrap: wrap; }
7064
7149
  }
7150
+ .insights-page .sesssort-sep { display: inline-block; width: 1px; height: 16px; background: var(--line); margin: 0 4px; vertical-align: middle; }
7151
+ /* dense table layout for the session list */
7152
+ .insights-page .stable { display: grid; gap: 1px; }
7153
+ .insights-page .strow { display: grid; grid-template-columns: minmax(0, 2.2fr) minmax(0, 1fr) 54px 54px 46px 54px 60px 78px; gap: 10px; align-items: center; width: 100%; appearance: none; -webkit-appearance: none; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; padding: 8px 12px; border-radius: 6px; border-left: 3px solid transparent; }
7154
+ .insights-page .strow:hover { background: var(--ins-inner); }
7155
+ .insights-page .strow.on { background: var(--accent-soft); border-left-color: var(--acc); }
7156
+ .insights-page .strow.review { border-left-color: var(--bad); }
7157
+ .insights-page .sthead { font-size: 11px; color: var(--mut); cursor: default; position: sticky; top: 56px; background: var(--panel); border-radius: 0; }
7158
+ .insights-page .sthead:hover { background: var(--panel); }
7159
+ .insights-page .stc-title { display: flex; flex-direction: column; min-width: 0; gap: 1px; }
7160
+ .insights-page .stc-title strong { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
7161
+ .insights-page .stc-title small { font-size: 11px; color: var(--mut); }
7162
+ .insights-page .stc-proj { font-size: 12px; color: var(--mut); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
7163
+ .insights-page .stc-num { font-size: 12px; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
7164
+ .insights-page .stc-num.bad { color: var(--bad); }
7165
+ .insights-page .stc-time { color: var(--mut); }
7166
+ .insights-page .strow.nostat .stc-msg { grid-column: 3 / 8; font-size: 11px; color: var(--mut); }
7065
7167
 
7066
7168
  /* session detail panel (full-width detail view) */
7067
7169
  .insight-detail { min-width: 0; background: var(--panel); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; }