wezard 2.2.2 → 2.4.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 (112) hide show
  1. package/CLAUDE.md +9 -6
  2. package/README.md +5 -5
  3. package/config.example.jsonc +12 -0
  4. package/dist/cli/init.js +2 -1
  5. package/dist/cli/init.js.map +1 -1
  6. package/dist/daemon/approval.js +90 -6
  7. package/dist/daemon/approval.js.map +1 -1
  8. package/dist/daemon/chat-log.js +6 -1
  9. package/dist/daemon/chat-log.js.map +1 -1
  10. package/dist/daemon/chat-name.js +15 -0
  11. package/dist/daemon/chat-name.js.map +1 -1
  12. package/dist/daemon/config-api.js +265 -70
  13. package/dist/daemon/config-api.js.map +1 -1
  14. package/dist/daemon/danger.js +15 -0
  15. package/dist/daemon/danger.js.map +1 -1
  16. package/dist/daemon/detail.js +49 -0
  17. package/dist/daemon/detail.js.map +1 -1
  18. package/dist/daemon/handoff.js +12 -5
  19. package/dist/daemon/handoff.js.map +1 -1
  20. package/dist/daemon/idle-nudge.js +55 -0
  21. package/dist/daemon/idle-nudge.js.map +1 -0
  22. package/dist/daemon/inbound.js +19 -14
  23. package/dist/daemon/inbound.js.map +1 -1
  24. package/dist/daemon/index.js +1509 -259
  25. package/dist/daemon/index.js.map +1 -1
  26. package/dist/daemon/jobs.js +180 -32
  27. package/dist/daemon/jobs.js.map +1 -1
  28. package/dist/daemon/last-response.js +15 -0
  29. package/dist/daemon/last-response.js.map +1 -1
  30. package/dist/daemon/memory-steward.js +124 -68
  31. package/dist/daemon/memory-steward.js.map +1 -1
  32. package/dist/daemon/mirror-bridge.js +506 -124
  33. package/dist/daemon/mirror-bridge.js.map +1 -1
  34. package/dist/daemon/mirror-store.js.map +1 -1
  35. package/dist/daemon/model-select.js +102 -0
  36. package/dist/daemon/model-select.js.map +1 -1
  37. package/dist/daemon/notices.js +147 -33
  38. package/dist/daemon/notices.js.map +1 -1
  39. package/dist/daemon/peers.js +261 -124
  40. package/dist/daemon/peers.js.map +1 -1
  41. package/dist/daemon/pending-items.js +171 -0
  42. package/dist/daemon/pending-items.js.map +1 -0
  43. package/dist/daemon/receipts.js +428 -80
  44. package/dist/daemon/receipts.js.map +1 -1
  45. package/dist/daemon/route.js +133 -19
  46. package/dist/daemon/route.js.map +1 -1
  47. package/dist/daemon/spawn-tmux.js +24 -13
  48. package/dist/daemon/spawn-tmux.js.map +1 -1
  49. package/dist/daemon/steward-guard.js +32 -0
  50. package/dist/daemon/steward-guard.js.map +1 -0
  51. package/dist/daemon/task-registry.js +1 -1
  52. package/dist/daemon/task-registry.js.map +1 -1
  53. package/dist/daemon/tasks.js +12 -4
  54. package/dist/daemon/tasks.js.map +1 -1
  55. package/dist/daemon/usage.js +4 -11
  56. package/dist/daemon/usage.js.map +1 -1
  57. package/dist/daemon/wizard-memory.js +36 -4
  58. package/dist/daemon/wizard-memory.js.map +1 -1
  59. package/dist/daemon/wizard.js +174 -87
  60. package/dist/daemon/wizard.js.map +1 -1
  61. package/dist/mcp/server.js +209 -132
  62. package/dist/mcp/server.js.map +1 -1
  63. package/dist/shared/charter-view.js +35 -0
  64. package/dist/shared/charter-view.js.map +1 -0
  65. package/dist/shared/chat-http.js +134 -32
  66. package/dist/shared/chat-http.js.map +1 -1
  67. package/dist/shared/chat-render.js +6 -3
  68. package/dist/shared/chat-render.js.map +1 -1
  69. package/dist/shared/chat-view.js +17 -6
  70. package/dist/shared/chat-view.js.map +1 -1
  71. package/dist/shared/cli-backends.js +2 -0
  72. package/dist/shared/cli-backends.js.map +1 -1
  73. package/dist/shared/config-meta.js +91 -0
  74. package/dist/shared/config-meta.js.map +1 -0
  75. package/dist/shared/config-writer.js +5 -6
  76. package/dist/shared/config-writer.js.map +1 -1
  77. package/dist/shared/config.js +273 -294
  78. package/dist/shared/config.js.map +1 -1
  79. package/dist/shared/daemon-token.js +18 -0
  80. package/dist/shared/daemon-token.js.map +1 -0
  81. package/dist/shared/detail-render.js +233 -20
  82. package/dist/shared/detail-render.js.map +1 -1
  83. package/dist/shared/detail-store.js +33 -12
  84. package/dist/shared/detail-store.js.map +1 -1
  85. package/dist/shared/effort.js +11 -0
  86. package/dist/shared/effort.js.map +1 -0
  87. package/dist/shared/keepalive.js +5 -5
  88. package/dist/shared/keepalive.js.map +1 -1
  89. package/dist/shared/model-prices.js +258 -0
  90. package/dist/shared/model-prices.js.map +1 -0
  91. package/dist/shared/pricing.js +55 -0
  92. package/dist/shared/pricing.js.map +1 -0
  93. package/dist/shared/reminder.js +18 -4
  94. package/dist/shared/reminder.js.map +1 -1
  95. package/dist/shared/role-render.js +210 -8
  96. package/dist/shared/role-render.js.map +1 -1
  97. package/dist/shared/role-view.js +104 -26
  98. package/dist/shared/role-view.js.map +1 -1
  99. package/dist/shared/session-label.js +4 -0
  100. package/dist/shared/session-label.js.map +1 -1
  101. package/dist/shared/task-file.js +16 -1
  102. package/dist/shared/task-file.js.map +1 -1
  103. package/dist/shared/turn-state.js +24 -0
  104. package/dist/shared/turn-state.js.map +1 -0
  105. package/dist/shared/world.js +116 -13
  106. package/dist/shared/world.js.map +1 -1
  107. package/dist/svr/index.js +2 -1
  108. package/dist/svr/index.js.map +1 -1
  109. package/hooks/pre-tool-use.sh +15 -3
  110. package/package.json +1 -1
  111. package/web/chat.css +226 -74
  112. package/web/chat.js +1075 -370
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../svr/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../svr/index.ts"],"names":[],"mappings":"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"}
@@ -196,8 +196,18 @@ fi
196
196
  # 1. cli/sync.ts (legacy claude-internal): mcp__wezard__<tool>
197
197
  # 2. .claude-plugin/plugin.json: mcp__plugin_wezard_wezard__<tool>
198
198
  # 用 *wezard__* 同时覆盖两种前缀。
199
+ # 例外: 改全机设置的「写」不在白名单 —— set_model scope:"default" (改 CLI 全局设置)。
200
+ # 它落回下面的正常审批; 首次绑定不受影响: 绑定走 IM 魔法短语 (claim.ts), 不经这个工具,
201
+ # 而绑定前没有审批人时 daemon 回 ask, 由本地 CLI 的原生确认框兜住, 不会卡死。
202
+ # config_set 放行: 它按路径分级, 放权项 (allowFrom / approval.* …) 由守护进程自己推确认卡,
203
+ # 那张卡不经 hook, danger.skipAll 也压不过; 在这里再拦一道就是一次改动两张卡。
199
204
  if [[ "$TOOL_NAME" == mcp__*wezard__* ]]; then
200
- emit "allow" "wezard mcp self-call bypass"
205
+ case "${TOOL_NAME##*wezard__}" in
206
+ # 任意深度找: DeferExecuteTool 剥包装失败时真实入参可能还套着一层, 只看顶层就失败开放。
207
+ set_model) WRITES=$(printf '%s' "$TOOL_INPUT" | jq -r '[.. | objects | .scope?] | index("default") != null') ;;
208
+ *) WRITES=false ;;
209
+ esac
210
+ [[ "$WRITES" == "false" ]] && emit "allow" "wezard mcp self-call bypass"
201
211
  fi
202
212
 
203
213
  # wezard 自家 Skill (slash commands like /wezard:audit) 也是本地插件代码, 无须审批。
@@ -217,8 +227,10 @@ if [[ "$TOOL_NAME" == "Bash" ]]; then
217
227
  emit "allow" "read-only bypass"
218
228
  fi
219
229
  # wezard CLI 同理: /wezard:audit /wezard:update 这些 slash command 的 ! bash 都打到本 daemon,
220
- # 自己审自己没意义, 也避免首次绑定时无处推卡。
221
- if [[ "$CMD" =~ (^|/|[[:space:]])wezard(\.sh)?([[:space:]]|$) ]]; then
230
+ # 自己审自己没意义, 也避免首次绑定时无处推卡。只认「整条命令就是一次 wezard 子命令」:
231
+ # 曾经命令里任意位置出现 wezard 一词就放行, `curl …/config/set; true wezard` 由此免审。
232
+ if [[ "$CMD" =~ ^[[:space:]]*([^[:space:]]*/)?wezard(\.sh)?[[:space:]]+(status|logs|pending|audit|update|reload|config-path|mirror-status|version|help)([[:space:]]|$) ]] \
233
+ && [[ ! "$CMD" =~ [\;\|\&\>\<\`\$\(] ]]; then
222
234
  emit "allow" "wezard self-call bypass"
223
235
  fi
224
236
  fi
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wezard",
3
- "version": "2.2.2",
3
+ "version": "2.4.0",
4
4
  "description": "Bridge Claude Code and WeCom: PreToolUse approval cards + bidirectional tmux session mirror with image paste",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/web/chat.css CHANGED
@@ -18,6 +18,8 @@
18
18
  --mine-line: #c9d7f3;
19
19
  --accent: #2f55c9; /* 视角色: 名字的点、选中态、自己的气泡描边 */
20
20
  --priv: #9a5b10; /* 私聊 */
21
+ --human: #12715a; /* 人名 —— 青绿, 与 wizard (墨色) 和群名 (暗金) 三分 */
22
+ --chat: #7d6410; /* 群名 —— 暗金, 与 role 名 (墨色 + 视角色的点) 分开: 群是频道不是 role */
21
23
  /* 头像底: 不透明, 且由 card/accent 推出 —— 叠在选中/高亮/关系图任何底色上都不变色, 换主题时随 token 走。 */
22
24
  --av-bg: var(--card);
23
25
  --av-line: var(--line);
@@ -42,10 +44,13 @@ button { font: inherit; color: inherit }
42
44
  .nm { font-weight: 600 }
43
45
  .nm::before { content: "."; color: var(--accent); font-weight: 700 }
44
46
  .nm.human::before, .nm.task::before, .nm.system::before, .nm.chat::before { content: none }
47
+ .nm.chat, .ch-who .sub .up { color: var(--chat) }
48
+ .nm.human { color: var(--human) }
45
49
 
46
50
  /* ── 侧栏: 我 + 会话 ─────────────────────────────────────────────── */
47
51
  .side {
48
- width: 312px; flex: none; background: var(--card); border-right: 1px solid var(--line);
52
+ /* 宽屏按页宽 25% 放大, 窄时不低于 332px。 */
53
+ width: max(332px, 25vw); flex: none; background: var(--card); border-right: 1px solid var(--line);
49
54
  display: flex; flex-direction: column; min-height: 0;
50
55
  }
51
56
 
@@ -59,14 +64,14 @@ button { font: inherit; color: inherit }
59
64
  flex-wrap: nowrap; align-items: stretch;
60
65
  }
61
66
  .rolebar > .who { min-width: 0 }
62
- .rolebar .id { display: flex; gap: 12px; align-items: center; min-width: 0 }
67
+ .rolebar .id { display: flex; gap: 10px; align-items: center; min-width: 0 }
63
68
  /* 与会话项头像同一套不透明底, 放大到名片尺寸。 */
64
69
  .rolebar .id .av {
65
- flex: none; display: grid; place-items: center; width: 48px; height: 48px; border-radius: 14px;
66
- background: var(--av-bg); box-shadow: inset 0 0 0 1px var(--av-line); font-size: 28px; line-height: 1;
70
+ flex: none; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px;
71
+ background: var(--av-bg); box-shadow: inset 0 0 0 1px var(--av-line); font-size: 23px; line-height: 1;
67
72
  }
68
- .rolebar .id .l { min-width: 0; display: flex; flex-direction: column; gap: 3px }
69
- .rolebar .id .nm { font-size: 18px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
73
+ .rolebar .id .l { min-width: 0; display: flex; flex-direction: column; gap: 2px }
74
+ .rolebar .id .nm { font-size: 15.5px; line-height: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
70
75
  /* 职责是一句话, 至多两行; 截掉的悬停看全文 (chat.js 的截断提示)。 */
71
76
  .rolebar .job {
72
77
  margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--ink); opacity: .8; word-break: break-word;
@@ -76,29 +81,21 @@ button { font: inherit; color: inherit }
76
81
  .rolebar .facts { display: flex; flex-wrap: wrap; gap: 0 10px; font-size: 11.5px; line-height: 1.45; color: var(--faint); min-width: 0 }
77
82
  /* 每条自身不折行; 独占一行仍超宽 (长路径 / 长群名) 才省略。 */
78
83
  .rolebar .facts span { white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis }
84
+ .rolebar .facts .fx { cursor: pointer }
85
+ .rolebar .facts .fx:hover, .rolebar .facts .fx.on { color: var(--accent) }
86
+ .rolebar .facts .fx.bad { color: #cf222e }
79
87
  .rolebar .go { cursor: pointer; color: var(--accent) }
80
88
  .rolebar .go:hover { text-decoration: underline }
81
- /* 分隔线两端收进来, 与上面搜索框的左右边距对齐, 不顶满侧栏。 */
82
- .acts { flex: none; display: flex; justify-content: center; align-items: center; gap: 2px; margin: 0 10px; padding: 4px 0 8px; border-bottom: 1px solid var(--line) }
83
- .acts:empty { display: none }
84
- /* 旧外壳 (daemon 未重启) 里它还在名片内 —— 那里不需要自己的内边距与分隔线。 */
85
- .rolebar .acts { margin: 0; padding: 0; border: 0 }
86
- /* 入口: 图标 + 名字 + 淡色副标题, 无框无底; hover 才浮出一层浅底, 打开着的染视角色。 */
87
- .bd {
88
- flex: none; padding: 1px 4px; border: 0; border-radius: 4px; background: none; cursor: pointer; white-space: nowrap;
89
- font-size: 12px; color: var(--mute); transition: color .12s;
90
- }
91
- .bd:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 3px }
92
- .bd.on { color: var(--accent); font-weight: 600 }
93
- .bd.bad { color: #cf222e }
94
- .acts .sep { color: var(--line); font-size: 12px; user-select: none }
95
89
  /* session 切换: name 右边一个小号文字触发器 + 浮层列表。name 先省略, 触发器不让位。 */
96
90
  .rolebar .id .l { flex: 1 }
97
91
  .rolebar .nl { display: flex; align-items: center; gap: 8px; min-width: 0 }
98
92
  #rb-st { flex: none; display: inline-flex }
99
93
  .rolebar .nl .nm { min-width: 0; flex: 0 1 auto }
100
- .rolebar .nl .cp { min-width: 0; flex: 0 1 auto; display: inline-flex; cursor: copy }
94
+ .rolebar .nl .cp { min-width: 0; flex: 0 1 auto; display: inline-flex; align-items: center; gap: 4px; cursor: pointer }
101
95
  .rolebar .nl .cp:hover .nm { text-decoration: underline dotted var(--faint); text-underline-offset: 3px }
96
+ /* 复制提示用 ⧉ 小图标, 不用 cursor:copy —— 那颗绿色的加号读起来像「添加」。 */
97
+ .rolebar .nl .cp::after { content: "⧉"; flex: none; font-size: 12px; color: var(--faint); display: none }
98
+ .rolebar .nl .cp:hover::after { display: inline }
102
99
  .toast {
103
100
  position: fixed; left: 50%; bottom: 28px; z-index: 1000; transform: translate(-50%, 8px);
104
101
  padding: 6px 12px; border-radius: 8px; font-size: 12.5px; color: #fff; background: rgba(28, 36, 48, .88);
@@ -126,6 +123,9 @@ button { font: inherit; color: inherit }
126
123
  opacity: 0; transform: translateY(-4px); pointer-events: none; transition: opacity .12s, transform .12s;
127
124
  }
128
125
  .sp.open .sp-list { opacity: 1; transform: none; pointer-events: auto }
126
+ /* 贴着右沿的下拉: 以触发器右下角为锚向左下展开, 宽度随选项。 */
127
+ .sp.end .sp-list { left: auto; right: 0; width: auto; min-width: 104px }
128
+ .sp-ic { flex: none; align-self: center; font-size: 12px; line-height: 1; margin-right: 1px }
129
129
  .sp-it {
130
130
  width: 100%; display: flex; gap: 10px; align-items: baseline;
131
131
  background: none; border: 0; border-radius: 6px; padding: 6px 8px; cursor: pointer; text-align: left; font-size: 12px;
@@ -138,13 +138,14 @@ button { font: inherit; color: inherit }
138
138
 
139
139
  /* ── 用量条: 一组轮次的总账 ─────────────────────────────────────────
140
140
  一个组件两处挂: 整页页脚 (wizard 的总账) / 聊天窗口底 (人与某个 wizard 这段往来的账)。
141
- 永远单行: 主人 · 模型 · 指标 · 图例, I/O 分布是贴底的色带。排不下时 chat.js 的 fitUsage
141
+ 永远单行: 主人 · 模型 · 指标 · 图例, I/O 分布是贴顶的色带 (兼作上边线)。排不下时 chat.js 的 fitUsage
142
142
  按容器宽度一级级加 f-* 藏掉次要的 (分布文字 → 名字 → 耗时), 不按视口断点。 */
143
143
  .usage {
144
144
  /* 整条只有一个字号、一个间隔: 指标、模型名、主人、图例都用它。 */
145
145
  --u-gap: 14px;
146
146
  flex: none; display: flex; align-items: center; flex-wrap: nowrap; gap: var(--u-gap); overflow: hidden; white-space: nowrap;
147
- position: relative; padding: 7px 20px 9px; border-top: 1px solid var(--line); background: var(--paper);
147
+ position: relative; padding: 8px 20px; background: var(--paper);
148
+ box-shadow: inset 0 1px var(--line); /* 没有分布 (total=0) 时的上边线; 有分布时被色带盖住 */
148
149
  font-family: ui-monospace, Menlo, monospace; font-size: 11.5px; color: var(--mute);
149
150
  font-variant-numeric: tabular-nums;
150
151
  }
@@ -153,20 +154,21 @@ button { font: inherit; color: inherit }
153
154
  .usage .u-who { display: flex; align-items: center; gap: 4px; max-width: 200px }
154
155
  .usage .u-nm { overflow: hidden; text-overflow: ellipsis; color: var(--faint) }
155
156
  .usage .u-lb { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 700; color: var(--accent) }
157
+ .usage .u-ef { margin-left: -4px; white-space: nowrap; color: var(--mute) }
156
158
  .usage .u-ic { font-style: normal; margin-right: 4px }
157
159
  .usage .u-kvs, .usage .leg { display: flex; gap: var(--u-gap) }
158
160
  .usage .kv { white-space: nowrap }
159
- /* I/O 分布 = bar 的底边: 横跨整宽的细色带, 不占行; 悬停加粗一点好瞄准某一段。 */
161
+ /* I/O 分布 = bar 的上边线: 横跨整宽的细色带, 不占行, 替掉 border-top; 悬停加粗一点好瞄准某一段。 */
160
162
  .usage .bar {
161
- position: absolute; left: 0; right: 0; bottom: 0; height: 3px; display: flex;
163
+ position: absolute; left: 0; right: 0; top: 0; height: 1px; display: flex;
162
164
  background: var(--line); transition: height .12s;
163
165
  }
164
- .usage .bar:hover { height: 6px }
166
+ .usage .bar:hover { height: 3px }
165
167
  .usage .bar .seg { flex: 1 1 0; min-width: 2px; height: 100% }
166
168
  .usage .leg { margin-left: auto }
167
169
  .usage .lg { display: flex; align-items: center; gap: 4px; white-space: nowrap }
168
170
  .usage .lg i { width: 7px; height: 7px; border-radius: 50%; flex: none }
169
- .usage.f-leg .leg, .usage.f-nm .u-nm, .usage.f-time .kv-time { display: none }
171
+ .usage.f-cnt .kv-turns, .usage.f-cnt .kv-tools, .usage.f-cnt .kv-api, .usage.f-leg .leg, .usage.f-nm .u-nm { display: none }
170
172
 
171
173
  /* 群聊头像 = 参与者头像拼图: 1 格居中, 2 格左右, 3/4 格田字。 */
172
174
  .mosaic {
@@ -187,6 +189,24 @@ button { font: inherit; color: inherit }
187
189
  }
188
190
  .convs h2:first-child { margin-top: 6px }
189
191
  .convs h2 span { font-weight: 400; color: var(--faint); font-variant-numeric: tabular-nums }
192
+ /* 会话列表 ↔ 关系图的小开关: 两个视图的第一行标题右端, 同一个位置。 */
193
+ .convs h2 .vt {
194
+ margin-left: auto; align-self: center; display: inline-flex; align-items: center; gap: 4px;
195
+ border: 0; background: none; padding: 2px 6px; border-radius: 5px; cursor: pointer;
196
+ font-size: 11px; font-weight: 400; color: var(--mute);
197
+ }
198
+ .convs h2 .vt:hover { background: #eef1f4; color: var(--accent) }
199
+ /* 时间范围下拉 (与名片里的 session 下拉同一个 .sp) 靠右, 视图开关紧跟在它后面。
200
+ 标题行把 span 一律染淡, 下拉里的字照回正常色。 */
201
+ .convs h2 .sp[data-dd="win"] { margin-left: auto; align-self: center; align-items: center }
202
+ .convs h2 .sp[data-dd="win"] + .vt { margin-left: 0 }
203
+ .convs h2 .sp .sp-it { color: var(--ink) }
204
+ .convs h2 .sp .sp-it.on { color: var(--accent) }
205
+ .convs h2 .sp-list span { color: inherit }
206
+ /* 关系图那一行字多 (范围 · 计数 · 名册缺席 · 看全部 · 开关): 一律不折行, 让范围那段先省略。 */
207
+ .convs h2 { white-space: nowrap; min-width: 0 }
208
+ .convs h2 > * { flex: none }
209
+ .convs h2 > span:first-of-type { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis }
190
210
 
191
211
  /* 群下的子项 (.si) 与私聊项 (.ci) 同一套尺寸 —— 只有一份。 */
192
212
  .ci, .si {
@@ -211,10 +231,25 @@ button { font: inherit; color: inherit }
211
231
  .ci .pv, .si .pv { display: block; font-size: 12px; color: var(--mute); overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
212
232
  .ci .pv:empty, .si .pv:empty { display: none }
213
233
  .ci .tag { font-size: 10.5px; border-radius: 4px; padding: 0 4px; flex: none }
234
+ .ci-chevron {
235
+ flex: none; align-self: center; position: relative; z-index: 1; width: 20px; height: 20px; padding: 0; border: 0;
236
+ background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center;
237
+ color: var(--faint); transition: color .12s, transform .12s;
238
+ }
239
+ .ci-chevron::before { content: "›"; font-size: 16px; font-weight: 300; display: flex; align-items: center; justify-content: center; line-height: 1 }
240
+ .ci-chevron:hover { color: var(--accent) }
241
+ .ci-chevron.on::before { transform: rotate(90deg) }
214
242
  /* 头像与名字是进入那个 role 视角的入口 —— 侧栏项、会话头、消息行同一种读法。
215
243
  它们嵌在整行那颗按钮里; 行本身悬停不变底色, 只有入口自己亮起。z-index 保证没有兄弟盖住命中区。 */
216
244
  .nm.go, .av.go { position: relative; z-index: 1; cursor: pointer }
217
- .nm.go:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 2px }
245
+ .nm.go:hover { text-decoration: underline; text-underline-offset: 2px }
246
+ /* 名字旁的 ⇄: 只在能切的名字悬停时露出 —— inline-block 同样不吃下划线 */
247
+ .nm .sw { display: none; margin-left: 4px; font-style: normal; font-weight: 400; font-size: 12px; color: var(--faint) }
248
+ .nm.go:hover .sw { display: inline-block }
249
+ /* 名字旁「+N」: 视角外它还在和几个 role 说话 —— inline-block 不吃名字 hover 的下划线 */
250
+ .nm .oc { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 8px; line-height: 15px; font-size: 10.5px; font-weight: 600;
251
+ color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); vertical-align: 1px }
252
+ .nm.go:hover .oc { background: color-mix(in srgb, var(--accent) 20%, transparent) }
218
253
  span.av.go { border-radius: 8px; transition: background .12s, box-shadow .12s }
219
254
  span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot) }
220
255
  .ci .tag.priv { color: var(--priv); background: #9a5b1014 }
@@ -224,6 +259,10 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
224
259
  /* 竖线的 x 与关系图里的竖向连线对齐: 都在项左缘 +10px (关系树 ul 缩进 20 - 线距 li 10)。 */
225
260
  .subs { margin: 0 0 6px 10px; border-left: 1px solid var(--line); padding-left: 2px }
226
261
  .si { color: var(--ink) }
262
+ /* 「chat 内全部」下与我无往来的子项: 整行淡下去、名字不加粗, 一眼分得出不是我的往来; 选中 / 悬停时恢复。 */
263
+ .si.far { opacity: .58 }
264
+ .si.far .t { font-weight: 400 }
265
+ .si.far:hover, .si.far.on { opacity: 1 }
227
266
  .si-more {
228
267
  display: block; width: 100%; text-align: center; padding: 4px 8px; border: 0;
229
268
  background: transparent; cursor: pointer; font-size: 11.5px; color: var(--mute);
@@ -247,6 +286,11 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
247
286
  background: var(--card); border-bottom: 1px solid var(--line);
248
287
  }
249
288
  .chathead .back { display: none; border: 0; background: none; font-size: 22px; color: var(--mute); cursor: pointer; padding: 0 4px }
289
+ /* 跳过来之后的返回 (工单页 / 移交行): 同一副无框箭头, 宽屏也露出。 */
290
+ .chathead .back.jb { display: block; flex: none; margin-right: -4px }
291
+ .chathead .back.jb:hover { color: var(--accent) }
292
+ /* 有跳转返回时窄屏只留它一个箭头: 先回跳转前; 没有它时 #tb-back 才是回会话列表。 */
293
+ .chathead:has(.back.jb) #tb-back { display: none }
250
294
  .ch-who { display: flex; gap: 11px; align-items: center; min-width: 0; flex: 1 }
251
295
  /* 一对一的两端头像: 同单个角色头像的画法, 后一个略压住前一个。 */
252
296
  .ch-who .pair { display: flex; flex: none; align-items: center }
@@ -261,8 +305,10 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
261
305
  .ch-who .t { min-width: 0; font-size: 16px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
262
306
  .ch-who > .t:not(:only-child) { flex: 0 1 auto }
263
307
  .ch-who .sub { min-width: 0; font-size: 11.5px; color: var(--mute); overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
308
+ /* 副标题里的群名: 回到整个群的入口, 平时只是一行灰字, 悬停才像链接。 */
309
+ .ch-who .sub .up { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer }
310
+ .ch-who .sub .up:hover { text-decoration: underline }
264
311
  .ch-acts { display: flex; gap: 8px; align-items: center; flex: 0 1 auto; min-width: 0; font-size: 12px; color: var(--mute) }
265
- .ch-acts .with { min-width: 0; max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
266
312
  .ch-acts .vb { flex: none }
267
313
  .vb {
268
314
  font-size: 12.5px; background: var(--card); border: 1px solid var(--line); border-radius: 7px;
@@ -298,7 +344,6 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
298
344
  .mrow.mine { flex-direction: row-reverse }
299
345
  .mrow.mine .mcol { align-items: flex-end }
300
346
  .mwho { font-size: 11.5px; color: var(--mute); display: flex; gap: 6px; align-items: center; flex-wrap: wrap }
301
- .mwho .to { color: var(--faint); display: inline-flex; gap: 6px; align-items: center; min-width: 0; max-width: 100% }
302
347
  .mwho .nm { min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
303
348
  .mwho .ch { font-size: 10.5px; border-radius: 4px; padding: 0 4px }
304
349
  .mwho .ch.priv { color: var(--priv); background: #9a5b1014 }
@@ -323,6 +368,38 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
323
368
  .mchip.priv { color: var(--priv); background: #9a5b1014 }
324
369
  .mchip.graph { color: #6639ba; background: #8250df12 }
325
370
  .mchip.sys { color: #0a7d6b; background: #0a7d6b12 }
371
+ /* 回执: 定论着色 —— 已交是常态不抢眼, 反问 / 报错要人看一眼, 没答案的几种灰红。 */
372
+ .mchip.rcpt { border: 0; font: inherit; font-size: 11px; line-height: 16px; color: #1a7f37; background: #1a7f3712 }
373
+ button.mchip.rcpt { cursor: pointer }
374
+ button.mchip.rcpt:hover { text-decoration: underline }
375
+ .mchip.rcpt:is(.st-need, .st-error) { color: #9a6700; background: #9a670014 }
376
+ .mchip.rcpt:is(.st-timeout, .st-silent, .st-dead, .st-canceled) { color: #cf222e; background: #cf222e10 }
377
+ /* 说给谁 (inline): 塞进正文第一段开头的头像 + 名字, 像行内 mention; 小圆角底色, 点它走移交行同一套跳转。 */
378
+ .to-in {
379
+ display: inline-flex; align-items: center; gap: 3px; vertical-align: baseline; padding: 1px 6px; border-radius: 5px;
380
+ line-height: 18px; background: color-mix(in srgb, #0969da 10%, transparent); color: var(--ink);
381
+ cursor: pointer; transition: background .12s;
382
+ }
383
+ .to-in:hover { background: color-mix(in srgb, #0969da 20%, transparent) }
384
+ .to-in .av { width: 16px; height: 16px; border-radius: 50%; border: 1px solid var(--line); background: var(--card); font-size: 10px; line-height: 14px; text-align: center; align-self: center }
385
+ .to-in .nm { font-weight: 500; font-size: 13px }
386
+ .to-in .nm::before { content: none }
387
+ /* 移交行里的对方: 小头像 + 名字。整行是入口 (开双方的往来), 悬停时整行提亮。 */
388
+ .handoff .ho-who { display: inline-flex; align-items: center; gap: 3px; color: var(--ink) }
389
+ .handoff .ho-line[data-hto]:hover { background: var(--av-hot); border-radius: 6px }
390
+ .handoff .ho-who .av { width: 16px; height: 16px; border-radius: 50%; border: 1px solid var(--line); background: var(--card); font-size: 10px; line-height: 14px; text-align: center }
391
+ .handoff .ho-who .nm { font-weight: 500 }
392
+ /* 过程框收起后移交行仍露在框头下 —— 活交给了谁, 不该和普通工具输出一起藏起来。 */
393
+ .steps.folded > .bubbles:has(> .bubble.tool .handoff) { display: flex; flex-direction: column }
394
+ .steps.folded > .bubbles > :not(:has(.handoff)) { display: none }
395
+ .steps.folded > .bubbles > .bubble.tool > :not(.handoff) { display: none }
396
+ .steps.folded .handoff .ho-line { padding-left: 6px }
397
+ .steps.folded .handoff .ho-text { margin-left: 6px }
398
+ .steps.folded .handoff.pub > .say { margin-left: 6px }
399
+ /* 公开移交那句是这一行的发话人在群里说的话: 气泡取这一行自己的底色 (过程框里 --bub 被重置成白卡,
400
+ 所以在 .mb 上先把行色存一份), 与普通消息同一颗。 */
401
+ .mrow .mb { --row-bub: var(--bub); --row-bub-line: var(--bub-line) }
402
+ .mrow .mb .steps .handoff.pub > .say > .bubble { background: var(--row-bub); border-color: var(--row-bub-line) }
326
403
 
327
404
  /* 气泡与过程框同一种底色: 都是这个人发出来的 —— 自己的是视角色, 别人的是浅灰。
328
405
  TURN_CSS 里写死的白卡 / 灰底 (嵌套气泡、代码块、折叠头) 在有色底上会显成一张张
@@ -331,7 +408,7 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
331
408
  .mrow .mb .steps :is(.bubble, .typing) { background: transparent }
332
409
  .mrow .mb .bubble.user,
333
410
  .mrow .mb .md-body code, .mrow .mb .md-body pre,
334
- .mrow .mb details:not(.tool-call) > summary,
411
+ .mrow .mb details:not(.tool-call, .handoff) > summary,
335
412
  .mrow .mb .tool-body section > h2, .mrow .mb .diff-meta,
336
413
  .mrow .mb .tool-call > summary:hover { background: var(--bub-soft); border-color: var(--bub-line) }
337
414
  .mrow .mb .md-body pre code { background: transparent }
@@ -372,32 +449,6 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
372
449
  /* 说给谁: 贴着气泡写在门里, 与气泡首行对齐。不吃点击 —— 点到它就是点门。
373
450
  门竖排: 描述在上、换视角箭头在下, 描述折几行箭头就跟着往下让, 两者不叠。
374
451
  contain: size —— 门的内容不参与这一行的高度, 描述再长也不撑高一行。 */
375
- .flip:has(.dest) {
376
- flex-direction: column; justify-content: flex-start; gap: 6px; contain: size;
377
- padding: calc(var(--av) + 12px) 4px 0;
378
- }
379
- /* 只留向下的吸附: 原先的 bottom 吸附会把箭头往上拽到视窗中线, 越过上面的描述。 */
380
- .flip:has(.dest) .fi { bottom: auto; flex: none }
381
- /* 门比描述矮 (一行短气泡) 时不许把描述压扁, 宁可溢到行外。 */
382
- .flip:has(.dest) .dest { flex: none }
383
- /* 压过 .mrow.mine .flip 的 flex-end: 竖排后那条是纵轴, 会把描述推到行底。 */
384
- .mrow .flip:has(.dest) { justify-content: flex-start }
385
- .mrow.them .flip:has(.dest) { align-items: flex-start }
386
- .mrow.mine .flip:has(.dest) { align-items: flex-end }
387
- .flip .dest {
388
- max-width: 100%; font-size: 11px; line-height: 1.45; color: var(--faint); pointer-events: none;
389
- display: flex; align-items: center; gap: 4px; max-height: calc(3 * 1.45em); overflow: hidden;
390
- }
391
- .flip .dest .arr { font-style: normal; flex: none }
392
- .flip .dest .dav {
393
- flex: none; width: 18px; height: 18px; border-radius: 50%; border: 1px solid var(--line); background: var(--card);
394
- display: grid; place-items: center; font-size: 11px; line-height: 1;
395
- }
396
- .flip .dest .dn { min-width: 0; overflow-wrap: anywhere }
397
- .mrow.them .flip .dest { text-align: left }
398
- .mrow.mine .flip .dest { text-align: right; justify-content: flex-end }
399
- .flip[disabled] .dest { color: var(--faint) }
400
- .mwho .to { display: none }
401
452
  .mwho .av.go { cursor: pointer }
402
453
  .mwho .av.go:hover { border-color: var(--accent); background: #2f55c914 }
403
454
 
@@ -425,7 +476,10 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
425
476
  }
426
477
  .tg-head { order: 9; display: flex; align-items: center; gap: 4px 10px; flex-wrap: wrap; padding: 0 2px }
427
478
  .mstat { display: inline-flex; align-items: center; gap: 4px 10px; flex-wrap: wrap }
428
- :is(.tg-head, .mstat, .say-cap) :is(.chip.model, .chip.tier), .tg-tok {
479
+ /* 两方对话里只藏模型 / ctx —— 时刻与耗时每条 wizard 消息都留着。 */
480
+ .mrow.two :is(.mstat, .say-cap, .ho-acct) :is(.chip, .tg-tok) { display: none }
481
+ .ho-acct { display: inline-flex; align-items: center; gap: 4px 8px }
482
+ :is(.tg-head, .mstat, .say-cap, .ho-acct) :is(.chip.model, .chip.tier), .tg-tok, .tg-dur {
429
483
  padding: 0; border: 0; border-radius: 0; background: none; font-weight: 400;
430
484
  font-size: 10.5px; color: var(--faint); font-family: ui-monospace, Menlo, monospace;
431
485
  }
@@ -460,8 +514,7 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
460
514
  }
461
515
  .ping-fold .mcol { max-width: 100% }
462
516
  .ping-fold .flip { display: none }
463
- .ping-fold .mwho .to { display: inline-flex }
464
- /* 折叠里的气泡同是白底 —— 描一圈虚线跟对话气泡分开, 与外框一个语气。 */
517
+ .ping-fold /* 折叠里的气泡同是白底 —— 描一圈虚线跟对话气泡分开, 与外框一个语气。 */
465
518
  .ping-fold .mb :is(.bubble.mq, .say > .bubble) { border: 1px dashed var(--bub-line) }
466
519
 
467
520
  @media (max-width: 760px) {
@@ -475,9 +528,7 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
475
528
  .thread { padding: 12px }
476
529
  .mcol { max-width: calc(86% + var(--av)) }
477
530
  .flip { min-width: 16px; padding: 0 4px; font-size: 0 }
478
- .flip .dest { display: none }
479
- .mwho .to { display: inline-flex }
480
- .thread { padding-bottom: calc(12px + env(safe-area-inset-bottom)) }
531
+ .thread { padding-bottom: calc(12px + env(safe-area-inset-bottom)) }
481
532
  .usage { padding: 8px 12px }
482
533
  .usage.page { padding-bottom: calc(8px + env(safe-area-inset-bottom)) }
483
534
  }
@@ -620,20 +671,16 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
620
671
  .wst::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: #b1bac4 }
621
672
  .wst.run { background: #dafbe1; color: #1a7f37 }
622
673
  .wst.run::before { background: #1a7f37; animation: pulse 1.4s infinite }
674
+ .wst.wait { background: #fbefff; color: #8250df }
675
+ .wst.wait::before { background: #8250df; animation: pulse 1.4s infinite }
623
676
  .wst.off { background: transparent; color: var(--faint); box-shadow: inset 0 0 0 1px var(--line) }
624
677
  .wst.off::before { background: transparent; box-shadow: inset 0 0 0 1.5px #b1bac4 }
625
678
  .wst:empty { padding: 0; background: none; box-shadow: none }
626
679
  .wst:empty::before { width: 7px; height: 7px }
627
680
  /* ══ 关系图 · 关系树 (家谱与派活合成一棵, 以当前 role 为中心) ══════════
628
681
  它替换的是侧栏的会话列表: 标题、图例与会话列表的分组标题同一种读法, 卡片就是会话项 (.ci)。 */
629
- .tview .tall {
630
- margin-left: auto; border: 0; background: none; padding: 0 2px; cursor: pointer; font-size: 11px; color: var(--faint);
631
- text-decoration: underline dotted; text-underline-offset: 3px;
632
- }
633
- .tview .tall:hover { color: var(--accent) }
634
682
  .tview h2 .warn { color: #9a6700; font-weight: 400 }
635
683
  .tree.all > li + li { margin-top: 10px; padding-top: 10px; border-top: 1px dashed #eaeef2 }
636
- .tfold { flex: none; font-size: 10px; font-weight: 400; color: var(--faint); border: 1px dashed var(--line); border-radius: 8px; padding: 0 5px; line-height: 14px }
637
684
  .tsolo { font-size: 11.5px; color: var(--faint); margin: 0 8px 10px }
638
685
  .tview .pempty { padding: 18px 8px }
639
686
 
@@ -653,6 +700,7 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
653
700
  }
654
701
  .tree li.spawn { --lc: #d4700f }
655
702
  .tree li.clone { --lc: #8250df }
703
+ .tree li.fork { --lc: #b39ddb }
656
704
  .tree li.peer { --lc: #0969da }
657
705
  .tree li.job { --lc: #bf8700 }
658
706
  .tree li.graph { --lc: #0a7d6b }
@@ -662,6 +710,8 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
662
710
  /* 连接用的祖先: 没和视角对过话, 只为把对过话的后代挂回家谱 —— 淡一档。 */
663
711
  .tci.via { opacity: .55 }
664
712
  .tci.via:hover { opacity: 1 }
713
+ .tci.ghost { opacity: .5; filter: grayscale(1) }
714
+ .tci.ghost:hover { opacity: .8 }
665
715
  .tlab { position: absolute; left: 4px; top: -8px; display: flex; gap: 3px; z-index: 2 }
666
716
  .tlab .ek { box-shadow: 0 0 0 2px var(--card) }
667
717
 
@@ -672,11 +722,53 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
672
722
  }
673
723
  .ek.spawn { color: #a8642a; background: #d4700f12 }
674
724
  .ek.clone { color: #7a5bb8; background: #8250df12 }
725
+ .ek.clone[data-cpoint] { cursor: pointer }
726
+ .ek.clone[data-cpoint]:hover { background: #8250df2e }
727
+ .ek.fork { color: #8f7bb8; background: #8250df0a }
675
728
  .ek.peer { color: #4a74b0; background: #0969da10 }
676
729
  .ek.job { color: #94741f; background: #bf870014 }
677
730
  .ek.graph { color: #3d8577; background: #0a7d6b12 }
678
731
  .ek.cross { font-weight: 400; background: #fff; box-shadow: inset 0 0 0 1px var(--line) }
679
732
 
733
+ /* ══ 宪章 · 按节 ═══════════════════════════════════════════════════ */
734
+ /* 通用 details summary (SHARED_CSS) 带灰底、大写和 ::before 箭头 —— 这里全部重置, 箭头自己画。 */
735
+ .cmix { display: flex; height: 8px; border-radius: 4px; overflow: hidden; gap: 2px; margin: 2px 0 6px }
736
+ .cmix i { display: block; min-width: 3px; background: #c4cbd3 }
737
+ .cmix i.top { background: #57606a }
738
+ .csec { border-top: 1px solid #eaeef2 }
739
+ .csec:first-of-type { border-top: 0 }
740
+ .csec > summary {
741
+ display: grid; grid-template-columns: 14px minmax(0, 1fr) minmax(60px, 160px) 92px; align-items: center; gap: 10px;
742
+ padding: 9px 4px; margin: 0 -4px; border-radius: 6px; border: 0; background: none;
743
+ cursor: pointer; list-style: none; user-select: none;
744
+ font-size: 13px; font-weight: 400; color: var(--ink); text-transform: none; letter-spacing: 0;
745
+ }
746
+ .csec > summary::-webkit-details-marker { display: none }
747
+ .csec > summary::before { content: "▸"; font-size: 11px; color: var(--faint); transition: transform .12s; justify-self: center }
748
+ .csec[open] > summary::before { content: "▸"; transform: rotate(90deg) }
749
+ .csec > summary:hover { background: #f6f8fa }
750
+ .csec .ct { overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
751
+ .csec[open] .ct { font-weight: 600 }
752
+ .csec .cbar { height: 6px; border-radius: 3px; background: #eaeef2; overflow: hidden }
753
+ .csec .cbar i { display: block; height: 100%; border-radius: 3px; background: #afb8c1 }
754
+ .csec.top .cbar i { background: #57606a }
755
+ .csec .cn { text-align: right; font-size: 11.5px; color: var(--mute); font-family: ui-monospace, Menlo, monospace; white-space: nowrap }
756
+ .csec .cn small { color: var(--faint); margin-left: 6px }
757
+ .csec .md-body { font-size: 13px; line-height: 1.6; margin: 0 0 12px 24px; padding: 2px 0 2px 12px; border-left: 2px solid #eaeef2; overflow-wrap: anywhere }
758
+ .csec .md-body > :first-child { margin-top: 0 }
759
+ .csec .md-body > :last-child { margin-bottom: 0 }
760
+ .csec .md-body ul { padding-left: 18px }
761
+ .csec .md-body pre { white-space: pre-wrap }
762
+ /* 关系 / 日程 / 宪章这类视图名很短, 窄屏上该让位的是副标题, 不是标题。 */
763
+ .outer .ch-who .t { flex-shrink: 0 }
764
+ .psec h3 .cx { white-space: nowrap; margin-left: auto; border: 0; background: none; padding: 0; cursor: pointer; font: 11px/1 inherit; color: var(--mute) }
765
+ .psec h3 .cx:hover { color: var(--ink) }
766
+ @media (max-width: 640px) {
767
+ .csec > summary { grid-template-columns: 14px minmax(0, 1fr) 84px }
768
+ .csec .cbar { display: none }
769
+ .csec .md-body { margin-left: 8px }
770
+ }
771
+
680
772
  /* ══ 日程 · 总览 / 任务卡 ════════════════════════════════════════════ */
681
773
  .pstats {
682
774
  max-width: 900px; margin: 0 auto 18px; display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px;
@@ -751,13 +843,14 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
751
843
  .jmm .tmp, .jmm .wchip { flex: none; white-space: nowrap }
752
844
 
753
845
  /* ── 搜索 (⌘K): 名片下、关系/日程入口上的搜索框 + 居中浮层 ──────────────
754
- 入口与会话项同圆角, 安静的浅灰底; 浮层的结果行沿用会话项的两行读法。 */
846
+ 入口与会话项同圆角, 无边框, 只靠浅灰底与侧栏白底区分; 悬停 / 键盘聚焦都只是底色再沉一档, 不描边。
847
+ 浮层的结果行沿用会话项的两行读法。 */
755
848
  .sbox {
756
- flex: none; display: flex; align-items: center; gap: 8px; margin: 10px 10px 4px; padding: 7px 10px;
757
- border: 1px solid var(--line); border-radius: 9px; background: var(--paper); color: var(--faint);
758
- cursor: pointer; text-align: left; transition: border-color .12s, background .12s, color .12s;
849
+ flex: none; display: flex; align-items: center; gap: 8px; margin: 10px 10px 4px; padding: 8px 11px;
850
+ border: 0; border-radius: 9px; background: var(--paper); color: var(--faint);
851
+ cursor: pointer; text-align: left; transition: background .12s, color .12s;
759
852
  }
760
- .sbox:hover { border-color: #c4cbd6; background: var(--card); color: var(--mute) }
853
+ .sbox:hover, .sbox:focus-visible { background: var(--them-soft); color: var(--mute); outline: none }
761
854
  .sbox .ic, .sk-in .ic { flex: none; display: inline-flex }
762
855
  .sbox .ic svg, .sk-in .ic svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round }
763
856
  .sbox .lb { flex: 1; min-width: 0; font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap }
@@ -840,4 +933,63 @@ span.av.go:hover { background: var(--av-hot); box-shadow: 0 0 0 3px var(--av-hot
840
933
 
841
934
  /* 搜索跳到的那一句: 气泡闪一圈视角色。 */
842
935
  .mrow.hit .mb > * { animation: hit 1.6s ease-out }
936
+ /* clone 徽标落到的那次 clone_wizard 调用: 调用框本身再闪一圈。 */
937
+ .mrow .bubble.tool.hit { animation: hit 2.4s ease-out }
843
938
  @keyframes hit { 0%, 30% { box-shadow: 0 0 0 3px #2f55c955 } 100% { box-shadow: 0 0 0 3px #2f55c900 } }
939
+
940
+
941
+ /* ══ 工单 (j:<id>) —— 工单页与工单列表都在主区; 侧栏 / 关系图只挂 📋 标记 ══════════════
942
+ 进度徽标: 开着 = 已落定 / 一共 (琥珀), 收了 = 收工 (灰); 有人卡住另挂一枚紫色「N 卡住」。 */
943
+ .jtag { flex: none; margin-left: 6px; font-size: 10.5px; line-height: 15px; padding: 0 5px; border-radius: 4px; color: var(--faint); background: #f1f3f6; font-weight: 500 }
944
+ .jtag.open { color: #94741f; background: #bf870014 }
945
+ .jstuck { flex: none; margin-left: 4px; font-size: 10.5px; line-height: 15px; padding: 0 5px; border-radius: 4px; color: #8250df; background: #fbefff; font-weight: 500 }
946
+ .jmk { flex: none; margin-left: 4px; padding: 0 3px; border-radius: 4px; font-size: 10.5px; opacity: .8; cursor: pointer }
947
+ .jmk:hover { opacity: 1; background: #bf870022 }
948
+ .jmk i { font-style: normal; margin-left: 1px; color: #94741f; font-size: 10px }
949
+ .ek.jmk { margin-left: 0; opacity: 1; color: #94741f; background: #bf870014 }
950
+ .ek.jmk:hover { background: #bf870033 }
951
+ /* 消息上的工单 badge: 📋 标题 + 进度, 点了进工单页。 */
952
+ .mchip.job { display: inline-flex; align-items: center; gap: 3px; max-width: 260px; border: 0; font: inherit; font-size: 11px; line-height: 16px; color: #94741f; background: #bf870014; cursor: pointer }
953
+ .mchip.job:hover { background: #bf870030 }
954
+ .mchip.job .jt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0 }
955
+ .mchip.job .jtag { margin-left: 2px }
956
+ /* 工单列表 (主区): 与侧栏会话项同一种行; 已收工的淡一档, 悬停回满。 */
957
+ .jlist h2 { margin: 14px 4px 6px; font-size: 12px; font-weight: 500; color: var(--mute) }
958
+ .jlist h2 span { margin-left: 6px; font-weight: 400; color: var(--faint) }
959
+ .jlist .ci { width: 100% }
960
+ .jclosed .ci { opacity: .55 }
961
+ .jclosed .ci:hover { opacity: 1 }
962
+ /* 工单页的开工 / 收工两行。 */
963
+ .tg-job { margin: 6px auto; max-width: 560px; padding: 8px 12px; border-radius: 8px; border: 1px dashed #bf870066; background: #bf870008; font-size: 12px; color: var(--mute) }
964
+ .tg-job .jh { display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap }
965
+ .tg-job .jh .jt { color: var(--ink); font-weight: 500 }
966
+ .tg-job .jh .s { margin-left: auto; color: var(--faint); font-size: 11px }
967
+ .tg-job .jmem { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 3px }
968
+ .tg-job .jmem li { display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap }
969
+ /* 派给成员的那段活原样分行, 太长收在 4 行 (悬停看全文)。 */
970
+ .tg-job .jmem em { flex-basis: 100%; padding-left: 40px; font-style: normal; color: var(--faint); white-space: pre-wrap; overflow-wrap: anywhere; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden }
971
+ .tg-job .jmem .go { border: 0; background: none; padding: 0; font: inherit; color: var(--accent); cursor: pointer }
972
+ .tg-job .ja { flex-basis: 100%; padding-left: 40px; color: var(--faint); font-family: ui-monospace, monospace; font-size: 11px }
973
+ .tg-job .jo { flex: none; font-size: 10.5px; padding: 0 5px; border-radius: 4px; color: #1a7f37; background: #1a7f3712 }
974
+ .tg-job .jo.st-run { color: #94741f; background: #bf870014 }
975
+ .tg-job .jo.st-none { color: var(--faint); background: #f1f3f6 }
976
+ .tg-job .jo:is(.st-timeout, .st-silent, .st-dead, .st-canceled) { color: #cf222e; background: #cf222e10 }
977
+ .tg-job .md-body { margin-top: 6px; color: var(--ink); overflow-wrap: anywhere }
978
+ .tg-job .md-body.jplan { color: var(--mute) }
979
+ /* 关系图: 正在看一张工单时只亮它的当事人与两端都是当事人的线。 */
980
+ .tree.jsel .tci.jout { opacity: .3 }
981
+ .tree.jsel .tci.jout:hover { opacity: 1 }
982
+ .tree.jsel li.jdim { --lc: #d0d7de }
983
+
984
+
985
+ .jstage { flex: none; margin-left: 6px; font-size: 10.5px; line-height: 15px; padding: 0 5px; border-radius: 4px; color: #0969da; background: #0969da12; font-weight: 500 }
986
+ .jstage.wait { color: #94741f; background: #bf870022 }
987
+ .jcrumb { font-weight: 400; color: var(--faint); margin-right: 2px }
988
+ .jcrumb button { border: 0; background: none; padding: 0; font: inherit; color: var(--accent); cursor: pointer }
989
+ .jcrumb i { font-style: normal; margin: 0 4px }
990
+ .tg-job .jrole { flex: none; font-size: 10.5px; padding: 0 5px; border-radius: 4px; color: #8250df; background: #fbefff }
991
+ .tg-job .jfork { font-size: 11px; color: var(--faint) }
992
+ .tg-job .jkids { margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--line, #0001) }
993
+ .tg-job .jkids .jn { font-size: 11px; color: var(--faint) }
994
+ .tg-job .jorigin, .tg-job .jcrit { margin-top: 6px }
995
+ .tg-job .jc { text-align: left }