botmux 2.89.0 → 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 (47) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +3 -3
  3. package/dist/core/skills/discovery.d.ts +16 -0
  4. package/dist/core/skills/discovery.d.ts.map +1 -1
  5. package/dist/core/skills/discovery.js +48 -2
  6. package/dist/core/skills/discovery.js.map +1 -1
  7. package/dist/core/worker-pool.d.ts.map +1 -1
  8. package/dist/core/worker-pool.js +9 -2
  9. package/dist/core/worker-pool.js.map +1 -1
  10. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  11. package/dist/dashboard/web/i18n.js +60 -2
  12. package/dist/dashboard/web/i18n.js.map +1 -1
  13. package/dist/dashboard/web/insights.d.ts.map +1 -1
  14. package/dist/dashboard/web/insights.js +514 -68
  15. package/dist/dashboard/web/insights.js.map +1 -1
  16. package/dist/dashboard/web/skills.d.ts.map +1 -1
  17. package/dist/dashboard/web/skills.js +1 -1
  18. package/dist/dashboard/web/skills.js.map +1 -1
  19. package/dist/dashboard/web/whiteboards.js +3 -3
  20. package/dist/dashboard-web/app.js +883 -795
  21. package/dist/dashboard-web/style.css +105 -3
  22. package/dist/services/insight/classify.d.ts +2 -0
  23. package/dist/services/insight/classify.d.ts.map +1 -1
  24. package/dist/services/insight/classify.js +25 -0
  25. package/dist/services/insight/classify.js.map +1 -1
  26. package/dist/services/insight/claude-span-reader.d.ts.map +1 -1
  27. package/dist/services/insight/claude-span-reader.js +7 -4
  28. package/dist/services/insight/claude-span-reader.js.map +1 -1
  29. package/dist/services/insight/report.d.ts.map +1 -1
  30. package/dist/services/insight/report.js +102 -23
  31. package/dist/services/insight/report.js.map +1 -1
  32. package/dist/services/insight/subagent-reader.d.ts +19 -0
  33. package/dist/services/insight/subagent-reader.d.ts.map +1 -0
  34. package/dist/services/insight/subagent-reader.js +111 -0
  35. package/dist/services/insight/subagent-reader.js.map +1 -0
  36. package/dist/services/insight/types.d.ts +43 -0
  37. package/dist/services/insight/types.d.ts.map +1 -1
  38. package/dist/services/insight/types.js.map +1 -1
  39. package/dist/skills/definitions.d.ts +8 -0
  40. package/dist/skills/definitions.d.ts.map +1 -1
  41. package/dist/skills/definitions.js +8 -2
  42. package/dist/skills/definitions.js.map +1 -1
  43. package/dist/skills/installer.d.ts +15 -0
  44. package/dist/skills/installer.d.ts.map +1 -1
  45. package/dist/skills/installer.js +39 -1
  46. package/dist/skills/installer.js.map +1 -1
  47. 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; }
@@ -1,6 +1,8 @@
1
1
  import type { InsightPhase } from './types.js';
2
2
  export declare function normalizeToolName(value: unknown): string;
3
3
  export declare function phaseForTool(tool: string): InsightPhase;
4
+ export declare function isInteractiveWaitTool(tool: string): boolean;
5
+ export declare function isUserRejectionText(text: string | undefined | null): boolean;
4
6
  export declare function isReadPhase(phase: InsightPhase): boolean;
5
7
  export declare function isWritePhase(phase: InsightPhase): boolean;
6
8
  export declare function safeToolLabel(tool: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/services/insight/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA0BvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAExD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/services/insight/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA+BvD;AAOD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAQD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAG5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAExD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -11,6 +11,12 @@ export function normalizeToolName(value) {
11
11
  }
12
12
  export function phaseForTool(tool) {
13
13
  const id = toolId(tool);
14
+ // Planning / bookkeeping tools (the todo list) are neither file reads nor
15
+ // file writes. Without this guard `TodoWrite` matches `write` → edit and
16
+ // `TodoRead` matches `read` → research, which silently pollutes the
17
+ // read/write ratio and can fire a bogus "修改多于阅读" suggestion.
18
+ if (id.includes('todo'))
19
+ return 'discuss';
14
20
  if (id.includes('read') ||
15
21
  id.includes('grep') ||
16
22
  id.includes('glob') ||
@@ -34,6 +40,25 @@ export function phaseForTool(tool) {
34
40
  return 'delegate';
35
41
  return 'discuss';
36
42
  }
43
+ // Tools that block on a human reply (question prompts, plan approval). Their
44
+ // wall-clock duration is mostly user idle time, not agent work, so it must not
45
+ // count toward work-time aggregation or slow-span detection — otherwise a user
46
+ // who answers a question 78 minutes later shows up as 78 minutes of "discuss".
47
+ const INTERACTIVE_WAIT_TOOLS = new Set(['askuserquestion', 'exitplanmode']);
48
+ export function isInteractiveWaitTool(tool) {
49
+ return INTERACTIVE_WAIT_TOOLS.has(toolId(tool));
50
+ }
51
+ // A user *declining* a proposed tool use (rejecting an edit, dismissing a
52
+ // question) is delivered as an is_error tool_result, but it is NOT a tool or
53
+ // agent failure — it is user behaviour. Counting it inflates failedSpans /
54
+ // failByTool and the failure-friction suggestions. Detect Claude Code's
55
+ // canonical rejection strings so these can be excluded from failure stats while
56
+ // genuine errors (InputValidationError, file-not-read, exit codes…) still count.
57
+ export function isUserRejectionText(text) {
58
+ if (!text)
59
+ return false;
60
+ return /the user doesn.?t want to proceed with this tool use|tool use was rejected/i.test(text);
61
+ }
37
62
  export function isReadPhase(phase) {
38
63
  return phase === 'research';
39
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/services/insight/classify.ts"],"names":[],"mappings":"AAEA,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,GAAG,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAChD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,IACE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACrB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,KAAK,IAAI;QACX,OAAO,UAAU,CAAC;IACpB,IACE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC1B,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,IACE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC9F,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,OAAO,KAAK,KAAK,UAAU,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/services/insight/classify.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-span-reader.d.ts","sourceRoot":"","sources":["../../../src/services/insight/claude-span-reader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAY,kBAAkB,EAAE,oBAAoB,EAAoC,MAAM,YAAY,CAAC;AAgJvH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,kBAAkB,CAuGpG"}
1
+ {"version":3,"file":"claude-span-reader.d.ts","sourceRoot":"","sources":["../../../src/services/insight/claude-span-reader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAY,kBAAkB,EAAE,oBAAoB,EAAoC,MAAM,YAAY,CAAC;AAgJvH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,kBAAkB,CA0GpG"}
@@ -1,4 +1,4 @@
1
- import { phaseForTool, normalizeToolName } from './classify.js';
1
+ import { phaseForTool, normalizeToolName, isUserRejectionText } from './classify.js';
2
2
  import { intentForToolInput, resultForToolOutput } from './intent.js';
3
3
  import { readCompleteJsonlObjects } from './jsonl.js';
4
4
  import { safePromptPreview } from './prompt.js';
@@ -226,8 +226,6 @@ export function parseClaudeInsight(path, opts = {}) {
226
226
  const span = pending.get(block.tool_use_id);
227
227
  if (!span)
228
228
  continue;
229
- span.status = block.is_error === true ? 'error' : 'ok';
230
- span.outputSummary = summarizeToolOutput(block);
231
229
  // tool_result content may be a string OR an array of {type:'text',text}
232
230
  // blocks — flatten the array form too, else a successful array result
233
231
  // looks empty and mislabels as 'no_output'.
@@ -239,7 +237,12 @@ export function parseClaudeInsight(path, opts = {}) {
239
237
  .join('\n')
240
238
  .trim() || undefined
241
239
  : undefined;
242
- span.result = resultForToolOutput(span, output, block.is_error === true);
240
+ // A user rejecting a proposed tool use lands as is_error but is user
241
+ // behaviour, not a tool/agent failure — don't let it count as a failure.
242
+ const errored = block.is_error === true && !isUserRejectionText(output);
243
+ span.status = errored ? 'error' : 'ok';
244
+ span.outputSummary = summarizeToolOutput({ is_error: errored, content: block.content });
245
+ span.result = resultForToolOutput(span, output, errored);
243
246
  if (span.phase === 'run') {
244
247
  const safeOutput = safeOutputPreview(block.content);
245
248
  if (safeOutput)
@@ -1 +1 @@
1
- {"version":3,"file":"claude-span-reader.js","sourceRoot":"","sources":["../../../src/services/insight/claude-span-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-span-reader.js","sourceRoot":"","sources":["../../../src/services/insight/claude-span-reader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/services/insight/report.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,aAAa,EAGb,uBAAuB,EAGvB,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EAGf,uBAAuB,EAGvB,mBAAmB,EAGnB,iBAAiB,EAEjB,qBAAqB,EAGrB,WAAW,EAMZ,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAcD,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAo6BD,wBAAgB,0BAA0B,CACxC,CAAC,EAAE,kBAAkB,EACrB,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,6BAAkC,GACvC,qBAAqB,CAkCvB;AAED,wBAAgB,4BAA4B,CAC1C,CAAC,EAAE,kBAAkB,EACrB,IAAI,GAAE,6BAAkC,GACvC,uBAAuB,CAqBzB;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,GAAE,yBAA8B,GAAG,iBAAiB,CA6DrH;AAyDD,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,2BAA2B,EAAE,EACvC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,mBAAmB,EAAE,EAChC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,mBAAmB,CAoDrB"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/services/insight/report.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,aAAa,EAGb,uBAAuB,EAGvB,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EAGf,uBAAuB,EAGvB,mBAAmB,EAGnB,iBAAiB,EAEjB,qBAAqB,EAGrB,WAAW,EAMZ,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAcD,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAo+BD,wBAAgB,0BAA0B,CACxC,CAAC,EAAE,kBAAkB,EACrB,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,6BAAkC,GACvC,qBAAqB,CAkCvB;AAED,wBAAgB,4BAA4B,CAC1C,CAAC,EAAE,kBAAkB,EACrB,IAAI,GAAE,6BAAkC,GACvC,uBAAuB,CAqBzB;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,GAAE,yBAA8B,GAAG,iBAAiB,CAwErH;AAyDD,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,2BAA2B,EAAE,EACvC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,mBAAmB,EAAE,EAChC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,mBAAmB,CAoDrB"}
@@ -1,7 +1,8 @@
1
1
  import { existsSync, statSync } from 'node:fs';
2
2
  import { basename, isAbsolute, relative } from 'node:path';
3
3
  import { resolveSessionTranscriptPath } from '../transcript-resolver.js';
4
- import { isReadPhase, isWritePhase } from './classify.js';
4
+ import { isReadPhase, isWritePhase, isInteractiveWaitTool } from './classify.js';
5
+ import { buildSubagentLanes } from './subagent-reader.js';
5
6
  import { parseAntigravityInsight } from './antigravity-span-reader.js';
6
7
  import { parseClaudeInsight } from './claude-span-reader.js';
7
8
  import { parseCodexInsight } from './codex-span-reader.js';
@@ -124,6 +125,12 @@ function cachedParseForKind(kind, path) {
124
125
  parseCache.set(key, parsed);
125
126
  return parsed;
126
127
  }
128
+ // A span is "slow" only if it actually spent that time working — tools that block
129
+ // on a human reply (ask-question / plan approval) are excluded everywhere slowness
130
+ // is judged, since their duration is mostly user idle, not a slow operation.
131
+ function isSlowSpan(span, slowThresholdMs) {
132
+ return (span.durationMs ?? 0) >= slowThresholdMs && !isInteractiveWaitTool(span.tool);
133
+ }
127
134
  function aggregate(spans, compactions, slowThresholdMs) {
128
135
  const agg = emptyAgg();
129
136
  agg.totalSpans = spans.length;
@@ -132,14 +139,18 @@ function aggregate(spans, compactions, slowThresholdMs) {
132
139
  let writes = 0;
133
140
  for (const s of spans) {
134
141
  const phase = INSIGHT_PHASES.includes(s.phase) ? s.phase : 'discuss';
142
+ // User-blocking tools (ask-question / plan approval) spend their wall-clock
143
+ // waiting on a human, not working — count the action but not its duration,
144
+ // and never flag it as a slow span.
145
+ const waits = isInteractiveWaitTool(s.tool);
135
146
  agg.phase[phase].count++;
136
- if (s.durationMs !== undefined)
147
+ if (s.durationMs !== undefined && !waits)
137
148
  agg.phase[phase].ms += Math.max(0, Math.round(s.durationMs));
138
149
  if (s.status === 'error') {
139
150
  agg.failedSpans++;
140
151
  agg.failByTool[s.tool] = (agg.failByTool[s.tool] ?? 0) + 1;
141
152
  }
142
- if ((s.durationMs ?? 0) >= slowThresholdMs)
153
+ if (isSlowSpan(s, slowThresholdMs))
143
154
  agg.slowSpans++;
144
155
  if (isReadPhase(phase))
145
156
  reads++;
@@ -177,7 +188,7 @@ function suggestionsFor(agg, spans, slowThresholdMs) {
177
188
  });
178
189
  }
179
190
  const slowest = spans
180
- .filter(s => s.durationMs !== undefined)
191
+ .filter(s => s.durationMs !== undefined && !isInteractiveWaitTool(s.tool))
181
192
  .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0))[0];
182
193
  if (slowest && (slowest.durationMs ?? 0) >= slowThresholdMs) {
183
194
  out.push({
@@ -264,7 +275,7 @@ function diagnosticForSuggestion(s, agg, spans, visibleSpans, slowThresholdMs) {
264
275
  }
265
276
  if (s.id === 'slow_span') {
266
277
  const slowSpans = spans
267
- .filter(span => (span.durationMs ?? 0) >= slowThresholdMs)
278
+ .filter(span => isSlowSpan(span, slowThresholdMs))
268
279
  .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));
269
280
  const slowSet = new Set(slowSpans);
270
281
  const t = target(span => slowSet.has(span));
@@ -314,7 +325,7 @@ function selectVisibleSpans(spans, maxSpans, slowThresholdMs) {
314
325
  }
315
326
  };
316
327
  addWhere(span => span.status === 'error');
317
- addWhere(span => (span.durationMs ?? 0) >= slowThresholdMs);
328
+ addWhere(span => isSlowSpan(span, slowThresholdMs));
318
329
  addWhere(() => true);
319
330
  return [...selected].sort((a, b) => a - b).map(i => spans[i]);
320
331
  }
@@ -445,6 +456,60 @@ function buildWorkSummary(spans, safeSpans, cwd) {
445
456
  .slice(0, 100);
446
457
  return { fileChanges, commandsRun };
447
458
  }
459
+ // Compact per-session rollup for cross-session recurrence hotspots. Computed from raw
460
+ // spans alone (filePaths→safe label, evidence.command already a scrubbed preview, tool +
461
+ // result enum), so it's cheap enough to include in summary mode. Top-N capped.
462
+ function buildSessionHot(spans, cwd) {
463
+ const files = new Map();
464
+ const cmds = new Map();
465
+ const errs = new Map();
466
+ for (const span of spans) {
467
+ for (const rawPath of span.filePaths ?? []) {
468
+ const label = safeFilePathLabel(rawPath, cwd);
469
+ const f = files.get(label) ?? { path: label, reads: 0, edits: 0, added: 0, removed: 0 };
470
+ if (isReadPhase(span.phase))
471
+ f.reads++;
472
+ if (isWritePhase(span.phase)) {
473
+ f.edits++;
474
+ const c = span.lineCounts ?? patchLineCounts(span.patchText);
475
+ if (c) {
476
+ f.added += c.added;
477
+ f.removed += c.removed;
478
+ }
479
+ }
480
+ files.set(label, f);
481
+ }
482
+ // Command recurrence keyed by the SAFE intent (kind + safe subject) — never the
483
+ // raw command text, which must not cross into the summary/overview (redaction
484
+ // invariant: command previews live only in per-session detail).
485
+ if (span.phase === 'run' && span.intent && span.intent.kind !== 'unknown') {
486
+ const subj = span.intent.subject;
487
+ const label = subj ? (subj.startsWith(span.intent.kind) ? subj : `${span.intent.kind} ${subj}`) : span.intent.kind;
488
+ if (label) {
489
+ const c = cmds.get(label) ?? { cmd: label, runs: 0, fails: 0 };
490
+ c.runs++;
491
+ if (span.status === 'error')
492
+ c.fails++;
493
+ cmds.set(label, c);
494
+ }
495
+ }
496
+ if (span.status === 'error') {
497
+ const result = span.result?.category ?? 'tool_error';
498
+ const key = `${span.tool}\u0000${result}`;
499
+ const e = errs.get(key) ?? { tool: span.tool, result, count: 0 };
500
+ e.count++;
501
+ errs.set(key, e);
502
+ }
503
+ }
504
+ return {
505
+ files: [...files.values()]
506
+ .map(f => ({ path: f.path, reads: f.reads, edits: f.edits, ...(f.added || f.removed ? { added: f.added, removed: f.removed } : {}) }))
507
+ .sort((a, b) => (b.edits + b.reads) - (a.edits + a.reads) || ((b.added ?? 0) + (b.removed ?? 0)) - ((a.added ?? 0) + (a.removed ?? 0)))
508
+ .slice(0, 12),
509
+ cmds: [...cmds.values()].sort((a, b) => b.fails - a.fails || b.runs - a.runs).slice(0, 12),
510
+ errs: [...errs.values()].sort((a, b) => b.count - a.count).slice(0, 8),
511
+ };
512
+ }
448
513
  function spanKey(span) {
449
514
  const intent = span.intent;
450
515
  return `${intent?.kind ?? 'unknown'}:${intent?.subject ?? ''}:${intent?.detail ?? ''}`;
@@ -471,7 +536,7 @@ function tagsForVisibleSpans(spans, slowThresholdMs) {
471
536
  const tags = new Set();
472
537
  if (span.status === 'error')
473
538
  tags.add('failure');
474
- if ((span.durationMs ?? 0) >= slowThresholdMs)
539
+ if (isSlowSpan(span, slowThresholdMs))
475
540
  tags.add('slow');
476
541
  const key = spanKey(span);
477
542
  if (!key.startsWith('unknown:') && (counts.get(key) ?? 0) > 1)
@@ -510,7 +575,7 @@ function buildTurnDiagnostics(visibleSpans, slowThresholdMs) {
510
575
  acc.runs++;
511
576
  if (span.status === 'error')
512
577
  acc.failures++;
513
- if (span.durationMs !== undefined)
578
+ if (span.durationMs !== undefined && !isInteractiveWaitTool(span.tool))
514
579
  acc.durationMs += Math.max(0, Math.round(span.durationMs));
515
580
  acc.spanIndexes.push(i);
516
581
  for (const tag of spanTags[i] ?? []) {
@@ -668,7 +733,10 @@ function metricsForTimeline(spans) {
668
733
  acc.runs++;
669
734
  if (span.status === 'error')
670
735
  acc.failures++;
671
- if (span.durationMs !== undefined)
736
+ // Exclude interactive-wait tools (ask-question / plan approval): their
737
+ // duration is user idle, not work — must match aggregate / buildTurnDiagnostics
738
+ // so the timeline turn metric doesn't show 119s of "waiting for the user".
739
+ if (span.durationMs !== undefined && !isInteractiveWaitTool(span.tool))
672
740
  acc.durationMs += span.durationMs;
673
741
  return acc;
674
742
  }, { reads: 0, edits: 0, runs: 0, failures: 0, durationMs: 0 });
@@ -976,11 +1044,22 @@ export function buildSafeInsightReport(q, opts = {}) {
976
1044
  turnDiagnostics,
977
1045
  turnTimeline,
978
1046
  };
1047
+ // Compact recurrence rollup — included in BOTH modes so the overview (summary mode)
1048
+ // can aggregate file/command/error hotspots cross-session without heavy detail.
1049
+ report.hot = buildSessionHot(parsed.spans, q.cwd);
979
1050
  if (detail === 'spans' && visible) {
980
1051
  report.spans = visible;
981
1052
  report.meta.spansReturned = visible.length;
982
1053
  report.meta.capped = parsed.spans.length > visible.length;
983
1054
  report.workSummary = buildWorkSummary(visibleRaw ?? [], visible, q.cwd);
1055
+ // Delegated sub-agents (Claude only) — one extra file parse each, so detail-mode only.
1056
+ // Route through the shared parse cache so repeated detail fetches don't re-read
1057
+ // unchanged sub-agent transcripts.
1058
+ if (resolved.kind === 'claude') {
1059
+ const lanes = buildSubagentLanes(resolved.path, p => cachedParseForKind('claude', p));
1060
+ if (lanes.length)
1061
+ report.subagents = lanes;
1062
+ }
984
1063
  }
985
1064
  return report;
986
1065
  }
@@ -1070,16 +1149,16 @@ export async function buildSafeInsightOverview(sessions, opts = {}) {
1070
1149
  const reports = rows.map(r => r.report);
1071
1150
  const okReports = reports.filter(r => r.status === 'ok');
1072
1151
  const agg = emptyAgg();
1073
- let rwSum = 0;
1074
- let rwN = 0;
1075
1152
  for (const report of okReports) {
1076
1153
  mergeAgg(agg, report.agg);
1077
- if (report.agg.readWriteRatio !== null) {
1078
- rwSum += report.agg.readWriteRatio;
1079
- rwN++;
1080
- }
1081
1154
  }
1082
- agg.readWriteRatio = rwN > 0 ? Math.round((rwSum / rwN) * 100) / 100 : null;
1155
+ // Pooled read/write ratio (Σresearch ÷ Σedit), matching the dashboard's
1156
+ // client-side aggregate. Averaging per-session ratios would let a tiny
1157
+ // 2-read/1-write session weigh the same as a 300-read/100-write one and
1158
+ // skew the headline, so pool the totals instead.
1159
+ agg.readWriteRatio = agg.phase.edit.count > 0
1160
+ ? Math.round((agg.phase.research.count / agg.phase.edit.count) * 100) / 100
1161
+ : null;
1083
1162
  return {
1084
1163
  generatedAt: parsedAt,
1085
1164
  meta: {
@@ -1123,16 +1202,16 @@ export function mergeSafeInsightOverviews(overviews, opts = {}) {
1123
1202
  const reports = rows.map(r => r.report);
1124
1203
  const okReports = reports.filter(r => r.status === 'ok');
1125
1204
  const agg = emptyAgg();
1126
- let rwSum = 0;
1127
- let rwN = 0;
1128
1205
  for (const report of okReports) {
1129
1206
  mergeAgg(agg, report.agg);
1130
- if (report.agg.readWriteRatio !== null) {
1131
- rwSum += report.agg.readWriteRatio;
1132
- rwN++;
1133
- }
1134
1207
  }
1135
- agg.readWriteRatio = rwN > 0 ? Math.round((rwSum / rwN) * 100) / 100 : null;
1208
+ // Pooled read/write ratio (Σresearch ÷ Σedit), matching the dashboard's
1209
+ // client-side aggregate. Averaging per-session ratios would let a tiny
1210
+ // 2-read/1-write session weigh the same as a 300-read/100-write one and
1211
+ // skew the headline, so pool the totals instead.
1212
+ agg.readWriteRatio = agg.phase.edit.count > 0
1213
+ ? Math.round((agg.phase.research.count / agg.phase.edit.count) * 100) / 100
1214
+ : null;
1136
1215
  return {
1137
1216
  generatedAt,
1138
1217
  meta: {