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.
- package/README.en.md +3 -3
- package/README.md +3 -3
- package/dist/core/skills/discovery.d.ts +16 -0
- package/dist/core/skills/discovery.d.ts.map +1 -1
- package/dist/core/skills/discovery.js +48 -2
- package/dist/core/skills/discovery.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +9 -2
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +60 -2
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights.d.ts.map +1 -1
- package/dist/dashboard/web/insights.js +514 -68
- package/dist/dashboard/web/insights.js.map +1 -1
- package/dist/dashboard/web/skills.d.ts.map +1 -1
- package/dist/dashboard/web/skills.js +1 -1
- package/dist/dashboard/web/skills.js.map +1 -1
- package/dist/dashboard/web/whiteboards.js +3 -3
- package/dist/dashboard-web/app.js +883 -795
- package/dist/dashboard-web/style.css +105 -3
- package/dist/services/insight/classify.d.ts +2 -0
- package/dist/services/insight/classify.d.ts.map +1 -1
- package/dist/services/insight/classify.js +25 -0
- package/dist/services/insight/classify.js.map +1 -1
- package/dist/services/insight/claude-span-reader.d.ts.map +1 -1
- package/dist/services/insight/claude-span-reader.js +7 -4
- package/dist/services/insight/claude-span-reader.js.map +1 -1
- package/dist/services/insight/report.d.ts.map +1 -1
- package/dist/services/insight/report.js +102 -23
- package/dist/services/insight/report.js.map +1 -1
- package/dist/services/insight/subagent-reader.d.ts +19 -0
- package/dist/services/insight/subagent-reader.d.ts.map +1 -0
- package/dist/services/insight/subagent-reader.js +111 -0
- package/dist/services/insight/subagent-reader.js.map +1 -0
- package/dist/services/insight/types.d.ts +43 -0
- package/dist/services/insight/types.d.ts.map +1 -1
- package/dist/services/insight/types.js.map +1 -1
- package/dist/skills/definitions.d.ts +8 -0
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +8 -2
- package/dist/skills/definitions.js.map +1 -1
- package/dist/skills/installer.d.ts +15 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +39 -1
- package/dist/skills/installer.js.map +1 -1
- 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
|
-
.
|
|
7023
|
-
|
|
7024
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: {
|