codingbuddy 5.0.0 → 5.1.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/dist/src/config/config.schema.d.ts +6 -0
- package/dist/src/config/config.schema.js +3 -0
- package/dist/src/config/config.schema.js.map +1 -1
- package/dist/src/context/context-archive.service.d.ts +14 -0
- package/dist/src/context/context-archive.service.js +257 -0
- package/dist/src/context/context-archive.service.js.map +1 -0
- package/dist/src/context/context-archive.types.d.ts +37 -0
- package/dist/src/context/context-archive.types.js +47 -0
- package/dist/src/context/context-archive.types.js.map +1 -0
- package/dist/src/context/context-document.service.d.ts +3 -1
- package/dist/src/context/context-document.service.js +18 -2
- package/dist/src/context/context-document.service.js.map +1 -1
- package/dist/src/context/context.module.js +3 -2
- package/dist/src/context/context.module.js.map +1 -1
- package/dist/src/context/index.d.ts +1 -0
- package/dist/src/context/index.js +1 -0
- package/dist/src/context/index.js.map +1 -1
- package/dist/src/impact/impact-event.service.d.ts +8 -0
- package/dist/src/impact/impact-event.service.js +53 -0
- package/dist/src/impact/impact-event.service.js.map +1 -0
- package/dist/src/impact/impact-report.service.d.ts +7 -0
- package/dist/src/impact/impact-report.service.js +92 -0
- package/dist/src/impact/impact-report.service.js.map +1 -0
- package/dist/src/impact/impact.module.d.ts +2 -0
- package/dist/src/impact/impact.module.js +22 -0
- package/dist/src/impact/impact.module.js.map +1 -0
- package/dist/src/impact/impact.types.d.ts +32 -0
- package/dist/src/impact/impact.types.js +5 -0
- package/dist/src/impact/impact.types.js.map +1 -0
- package/dist/src/impact/index.d.ts +4 -0
- package/dist/src/impact/index.js +25 -0
- package/dist/src/impact/index.js.map +1 -0
- package/dist/src/keyword/diff-analyzer.d.ts +19 -0
- package/dist/src/keyword/diff-analyzer.js +127 -0
- package/dist/src/keyword/diff-analyzer.js.map +1 -0
- package/dist/src/keyword/keyword.service.d.ts +1 -0
- package/dist/src/keyword/keyword.service.js +25 -3
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +25 -0
- package/dist/src/keyword/keyword.types.js +27 -0
- package/dist/src/keyword/keyword.types.js.map +1 -1
- package/dist/src/keyword/primary-agent-resolver.d.ts +2 -1
- package/dist/src/keyword/primary-agent-resolver.js +2 -1
- package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
- package/dist/src/keyword/strategies/act-agent.strategy.js +8 -0
- package/dist/src/keyword/strategies/act-agent.strategy.js.map +1 -1
- package/dist/src/keyword/strategies/resolution-strategy.interface.d.ts +2 -0
- package/dist/src/keyword/visual-data.builder.d.ts +10 -0
- package/dist/src/keyword/visual-data.builder.js +62 -0
- package/dist/src/keyword/visual-data.builder.js.map +1 -0
- package/dist/src/mcp/handlers/agent.handler.d.ts +3 -1
- package/dist/src/mcp/handlers/agent.handler.js +13 -2
- package/dist/src/mcp/handlers/agent.handler.js.map +1 -1
- package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
- package/dist/src/mcp/handlers/checklist-context.handler.js +13 -2
- package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -1
- package/dist/src/mcp/handlers/context-archive.handler.d.ts +14 -0
- package/dist/src/mcp/handlers/context-archive.handler.js +136 -0
- package/dist/src/mcp/handlers/context-archive.handler.js.map +1 -0
- package/dist/src/mcp/handlers/context-document.handler.d.ts +3 -1
- package/dist/src/mcp/handlers/context-document.handler.js +22 -2
- package/dist/src/mcp/handlers/context-document.handler.js.map +1 -1
- package/dist/src/mcp/handlers/impact.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/impact.handler.js +53 -0
- package/dist/src/mcp/handlers/impact.handler.js.map +1 -0
- package/dist/src/mcp/handlers/index.d.ts +3 -0
- package/dist/src/mcp/handlers/index.js +7 -1
- package/dist/src/mcp/handlers/index.js.map +1 -1
- package/dist/src/mcp/handlers/mode.handler.d.ts +4 -1
- package/dist/src/mcp/handlers/mode.handler.js +51 -3
- package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
- package/dist/src/mcp/handlers/rule-insights.handler.d.ts +14 -0
- package/dist/src/mcp/handlers/rule-insights.handler.js +78 -0
- package/dist/src/mcp/handlers/rule-insights.handler.js.map +1 -0
- package/dist/src/mcp/handlers/rules.handler.d.ts +3 -1
- package/dist/src/mcp/handlers/rules.handler.js +14 -2
- package/dist/src/mcp/handlers/rules.handler.js.map +1 -1
- package/dist/src/mcp/mcp.module.js +5 -0
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/rules/rule-insights.service.d.ts +31 -0
- package/dist/src/rules/rule-insights.service.js +102 -0
- package/dist/src/rules/rule-insights.service.js.map +1 -0
- package/dist/src/rules/rules.module.js +3 -2
- package/dist/src/rules/rules.module.js.map +1 -1
- package/dist/src/shared/version.d.ts +1 -1
- package/dist/src/shared/version.js +1 -1
- package/dist/src/skill/i18n/keywords.types.d.ts +4 -2
- package/dist/src/skill/i18n/keywords.types.js +3 -0
- package/dist/src/skill/i18n/keywords.types.js.map +1 -1
- package/dist/src/tui/components/ActModeScreen.d.ts +10 -0
- package/dist/src/tui/components/ActModeScreen.js +25 -0
- package/dist/src/tui/components/ActModeScreen.js.map +1 -0
- package/dist/src/tui/components/AgentDiscussionPanel.js +105 -11
- package/dist/src/tui/components/AgentDiscussionPanel.js.map +1 -1
- package/dist/src/tui/components/AgentDiscussionPanel.spec.js +154 -10
- package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +1 -1
- package/dist/src/tui/components/EvalModeScreen.d.ts +8 -0
- package/dist/src/tui/components/EvalModeScreen.js +21 -0
- package/dist/src/tui/components/EvalModeScreen.js.map +1 -0
- package/dist/src/tui/components/FlowMap.spec.js.map +1 -1
- package/dist/src/tui/components/FocusedAgentPanel.js +1 -1
- package/dist/src/tui/components/FocusedAgentPanel.js.map +1 -1
- package/dist/src/tui/components/FocusedAgentPanel.spec.js +1 -3
- package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +1 -1
- package/dist/src/tui/components/HeaderBar.js +3 -3
- package/dist/src/tui/components/HeaderBar.js.map +1 -1
- package/dist/src/tui/components/ModeScreenRouter.d.ts +13 -0
- package/dist/src/tui/components/ModeScreenRouter.js +51 -0
- package/dist/src/tui/components/ModeScreenRouter.js.map +1 -0
- package/dist/src/tui/components/PlanModeScreen.d.ts +10 -0
- package/dist/src/tui/components/PlanModeScreen.js +24 -0
- package/dist/src/tui/components/PlanModeScreen.js.map +1 -0
- package/dist/src/tui/components/SessionDashboard.d.ts +17 -0
- package/dist/src/tui/components/SessionDashboard.js +58 -0
- package/dist/src/tui/components/SessionDashboard.js.map +1 -0
- package/dist/src/tui/components/act-screen.pure.d.ts +12 -0
- package/dist/src/tui/components/act-screen.pure.js +93 -0
- package/dist/src/tui/components/act-screen.pure.js.map +1 -0
- package/dist/src/tui/components/agent-discussion-panel.pure.d.ts +45 -0
- package/dist/src/tui/components/agent-discussion-panel.pure.js +130 -23
- package/dist/src/tui/components/agent-discussion-panel.pure.js.map +1 -1
- package/dist/src/tui/components/eval-screen.pure.d.ts +13 -0
- package/dist/src/tui/components/eval-screen.pure.js +76 -0
- package/dist/src/tui/components/eval-screen.pure.js.map +1 -0
- package/dist/src/tui/components/index.d.ts +14 -0
- package/dist/src/tui/components/index.js +40 -1
- package/dist/src/tui/components/index.js.map +1 -1
- package/dist/src/tui/components/plan-screen.pure.d.ts +9 -0
- package/dist/src/tui/components/plan-screen.pure.js +61 -0
- package/dist/src/tui/components/plan-screen.pure.js.map +1 -0
- package/dist/src/tui/components/session-dashboard.pure.d.ts +43 -0
- package/dist/src/tui/components/session-dashboard.pure.js +182 -0
- package/dist/src/tui/components/session-dashboard.pure.js.map +1 -0
- package/dist/src/tui/dashboard-app.js +3 -4
- package/dist/src/tui/dashboard-app.js.map +1 -1
- package/dist/src/tui/dashboard-types.d.ts +47 -0
- package/dist/src/tui/dashboard-types.js +20 -1
- package/dist/src/tui/dashboard-types.js.map +1 -1
- package/dist/src/tui/events/index.d.ts +1 -1
- package/dist/src/tui/events/index.js.map +1 -1
- package/dist/src/tui/events/types.d.ts +23 -1
- package/dist/src/tui/events/types.js +4 -0
- package/dist/src/tui/events/types.js.map +1 -1
- package/dist/src/tui/hooks/use-dashboard-state.d.ts +13 -1
- package/dist/src/tui/hooks/use-dashboard-state.js +60 -1
- package/dist/src/tui/hooks/use-dashboard-state.js.map +1 -1
- package/dist/src/tui-bundle.mjs +965 -278
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CROSS_REVIEW_VERBS = exports.AGENT_PALETTE = void 0;
|
|
3
4
|
exports.renderStanceHistory = renderStanceHistory;
|
|
5
|
+
exports.assignAgentColors = assignAgentColors;
|
|
6
|
+
exports.detectConflicts = detectConflicts;
|
|
7
|
+
exports.estimateBlockHeight = estimateBlockHeight;
|
|
8
|
+
exports.renderCollaborationBlocks = renderCollaborationBlocks;
|
|
4
9
|
exports.renderOpinionLine = renderOpinionLine;
|
|
5
10
|
exports.renderCrossReviewLine = renderCrossReviewLine;
|
|
6
11
|
exports.renderConsensusLine = renderConsensusLine;
|
|
7
12
|
exports.renderDiscussionPanel = renderDiscussionPanel;
|
|
8
13
|
const types_1 = require("../../collaboration/types");
|
|
9
14
|
const theme_1 = require("../utils/theme");
|
|
10
|
-
|
|
15
|
+
exports.AGENT_PALETTE = [
|
|
16
|
+
'cyan',
|
|
17
|
+
'magenta',
|
|
18
|
+
'yellow',
|
|
19
|
+
'green',
|
|
20
|
+
'blue',
|
|
21
|
+
'red',
|
|
22
|
+
'white',
|
|
23
|
+
];
|
|
24
|
+
exports.CROSS_REVIEW_VERBS = {
|
|
11
25
|
approve: 'agrees',
|
|
12
26
|
concern: 'notes',
|
|
13
27
|
reject: 'disagrees',
|
|
@@ -17,6 +31,120 @@ function renderStanceHistory(stances) {
|
|
|
17
31
|
return '';
|
|
18
32
|
return stances.map(s => types_1.STANCE_ICONS[s]).join(' → ');
|
|
19
33
|
}
|
|
34
|
+
function assignAgentColors(rounds) {
|
|
35
|
+
const colors = {};
|
|
36
|
+
let idx = 0;
|
|
37
|
+
for (const round of rounds) {
|
|
38
|
+
for (const opinion of round.opinions) {
|
|
39
|
+
if (!colors[opinion.agentId]) {
|
|
40
|
+
colors[opinion.agentId] = exports.AGENT_PALETTE[idx % exports.AGENT_PALETTE.length];
|
|
41
|
+
idx++;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return colors;
|
|
46
|
+
}
|
|
47
|
+
function detectConflicts(opinions) {
|
|
48
|
+
const hasApprove = opinions.some(o => o.stance === 'approve');
|
|
49
|
+
const hasReject = opinions.some(o => o.stance === 'reject');
|
|
50
|
+
if (!hasApprove || !hasReject)
|
|
51
|
+
return new Set();
|
|
52
|
+
const conflicting = new Set();
|
|
53
|
+
for (const opinion of opinions) {
|
|
54
|
+
if (opinion.stance === 'reject') {
|
|
55
|
+
conflicting.add(opinion.agentId);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return conflicting;
|
|
59
|
+
}
|
|
60
|
+
function estimateBlockHeight(block) {
|
|
61
|
+
switch (block.type) {
|
|
62
|
+
case 'agent-bubble':
|
|
63
|
+
return 4;
|
|
64
|
+
case 'consensus-bar':
|
|
65
|
+
return 2;
|
|
66
|
+
default:
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function buildAgentNameMap(rounds) {
|
|
71
|
+
const map = {};
|
|
72
|
+
for (const round of rounds) {
|
|
73
|
+
for (const opinion of round.opinions) {
|
|
74
|
+
map[opinion.agentId] = opinion.agentName;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return map;
|
|
78
|
+
}
|
|
79
|
+
function buildStanceHistories(rounds) {
|
|
80
|
+
const histories = {};
|
|
81
|
+
for (const round of rounds) {
|
|
82
|
+
for (const opinion of round.opinions) {
|
|
83
|
+
if (!histories[opinion.agentId]) {
|
|
84
|
+
histories[opinion.agentId] = [];
|
|
85
|
+
}
|
|
86
|
+
histories[opinion.agentId].push(opinion.stance);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return histories;
|
|
90
|
+
}
|
|
91
|
+
function renderCollaborationBlocks(rounds, _width) {
|
|
92
|
+
if (rounds.length === 0) {
|
|
93
|
+
return [{ type: 'empty', text: 'No agent discussion yet' }];
|
|
94
|
+
}
|
|
95
|
+
const blocks = [];
|
|
96
|
+
const agentNames = buildAgentNameMap(rounds);
|
|
97
|
+
const agentColors = assignAgentColors(rounds);
|
|
98
|
+
const stanceHistories = buildStanceHistories(rounds);
|
|
99
|
+
const latestRound = rounds[rounds.length - 1];
|
|
100
|
+
const conflicts = detectConflicts(latestRound.opinions);
|
|
101
|
+
blocks.push({
|
|
102
|
+
type: 'header',
|
|
103
|
+
text: `── Agent Discussion (Round ${latestRound.roundNumber}) ──`,
|
|
104
|
+
});
|
|
105
|
+
for (const opinion of latestRound.opinions) {
|
|
106
|
+
const history = stanceHistories[opinion.agentId] ?? [];
|
|
107
|
+
blocks.push({
|
|
108
|
+
type: 'agent-bubble',
|
|
109
|
+
agentName: opinion.agentName,
|
|
110
|
+
agentAvatar: (0, theme_1.getAgentAvatar)(opinion.agentName),
|
|
111
|
+
color: agentColors[opinion.agentId] ?? 'white',
|
|
112
|
+
stanceIcon: types_1.STANCE_ICONS[opinion.stance],
|
|
113
|
+
reasoning: opinion.reasoning,
|
|
114
|
+
isConflict: conflicts.has(opinion.agentId),
|
|
115
|
+
stanceHistoryText: renderStanceHistory(history),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
for (const review of latestRound.crossReviews) {
|
|
119
|
+
const fromName = agentNames[review.fromAgentId] ?? review.fromAgentId;
|
|
120
|
+
const toName = agentNames[review.toAgentId] ?? review.toAgentId;
|
|
121
|
+
blocks.push({
|
|
122
|
+
type: 'cross-review-block',
|
|
123
|
+
fromName,
|
|
124
|
+
fromAvatar: (0, theme_1.getAgentAvatar)(fromName),
|
|
125
|
+
fromColor: agentColors[review.fromAgentId] ?? 'white',
|
|
126
|
+
toName,
|
|
127
|
+
toAvatar: (0, theme_1.getAgentAvatar)(toName),
|
|
128
|
+
toColor: agentColors[review.toAgentId] ?? 'white',
|
|
129
|
+
verb: exports.CROSS_REVIEW_VERBS[review.stance],
|
|
130
|
+
comment: review.comment,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const consensus = (0, types_1.calculateConsensus)(latestRound.opinions);
|
|
134
|
+
const percentage = consensus.totalAgents > 0
|
|
135
|
+
? Math.round((consensus.approveCount / consensus.totalAgents) * 100)
|
|
136
|
+
: 0;
|
|
137
|
+
blocks.push({
|
|
138
|
+
type: 'consensus-bar',
|
|
139
|
+
approveCount: consensus.approveCount,
|
|
140
|
+
concernCount: consensus.concernCount,
|
|
141
|
+
rejectCount: consensus.rejectCount,
|
|
142
|
+
totalAgents: consensus.totalAgents,
|
|
143
|
+
reached: consensus.reached,
|
|
144
|
+
percentage,
|
|
145
|
+
});
|
|
146
|
+
return blocks;
|
|
147
|
+
}
|
|
20
148
|
function renderOpinionLine(opinion, stanceHistory) {
|
|
21
149
|
const avatar = (0, theme_1.getAgentAvatar)(opinion.agentName);
|
|
22
150
|
const icon = types_1.STANCE_ICONS[opinion.stance];
|
|
@@ -38,7 +166,7 @@ function renderCrossReviewLine(review, agentNames) {
|
|
|
38
166
|
const fromName = agentNames[review.fromAgentId] ?? review.fromAgentId;
|
|
39
167
|
const toAvatar = (0, theme_1.getAgentAvatar)(agentNames[review.toAgentId] ?? 'unknown');
|
|
40
168
|
const toName = agentNames[review.toAgentId] ?? review.toAgentId;
|
|
41
|
-
const verb = CROSS_REVIEW_VERBS[review.stance];
|
|
169
|
+
const verb = exports.CROSS_REVIEW_VERBS[review.stance];
|
|
42
170
|
return {
|
|
43
171
|
text: `${fromAvatar} ${fromName} → ${toAvatar} ${toName} ${verb}: "${review.comment}"`,
|
|
44
172
|
type: 'cross-review',
|
|
@@ -51,27 +179,6 @@ function renderConsensusLine(consensus) {
|
|
|
51
179
|
type: 'consensus',
|
|
52
180
|
};
|
|
53
181
|
}
|
|
54
|
-
function buildAgentNameMap(rounds) {
|
|
55
|
-
const map = {};
|
|
56
|
-
for (const round of rounds) {
|
|
57
|
-
for (const opinion of round.opinions) {
|
|
58
|
-
map[opinion.agentId] = opinion.agentName;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return map;
|
|
62
|
-
}
|
|
63
|
-
function buildStanceHistories(rounds) {
|
|
64
|
-
const histories = {};
|
|
65
|
-
for (const round of rounds) {
|
|
66
|
-
for (const opinion of round.opinions) {
|
|
67
|
-
if (!histories[opinion.agentId]) {
|
|
68
|
-
histories[opinion.agentId] = [];
|
|
69
|
-
}
|
|
70
|
-
histories[opinion.agentId].push(opinion.stance);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return histories;
|
|
74
|
-
}
|
|
75
182
|
function renderDiscussionPanel(rounds, _width) {
|
|
76
183
|
if (rounds.length === 0) {
|
|
77
184
|
return [{ text: 'No agent discussion yet', type: 'empty' }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-discussion-panel.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/agent-discussion-panel.pure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-discussion-panel.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/agent-discussion-panel.pure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentReviewResult } from '../dashboard-types';
|
|
2
|
+
export interface EvalScreenLine {
|
|
3
|
+
type: 'header' | 'agent-result' | 'category' | 'total-score' | 'empty';
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function renderScoreBar(score: number, maxScore: number, barWidth: number): string;
|
|
7
|
+
export declare function renderAgentResult(result: AgentReviewResult, width: number): EvalScreenLine[];
|
|
8
|
+
export declare function calculateAggregateScore(results: readonly AgentReviewResult[]): {
|
|
9
|
+
total: number;
|
|
10
|
+
max: number;
|
|
11
|
+
percent: number;
|
|
12
|
+
};
|
|
13
|
+
export declare function renderEvalScreen(results: readonly AgentReviewResult[], width: number): EvalScreenLine[];
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderScoreBar = renderScoreBar;
|
|
4
|
+
exports.renderAgentResult = renderAgentResult;
|
|
5
|
+
exports.calculateAggregateScore = calculateAggregateScore;
|
|
6
|
+
exports.renderEvalScreen = renderEvalScreen;
|
|
7
|
+
function renderScoreBar(score, maxScore, barWidth) {
|
|
8
|
+
const percent = maxScore > 0 ? Math.round((score / maxScore) * 100) : 0;
|
|
9
|
+
const filled = Math.round((percent / 100) * barWidth);
|
|
10
|
+
const empty = barWidth - filled;
|
|
11
|
+
return `[${'█'.repeat(filled)}${'░'.repeat(empty)}] ${score}/${maxScore}`;
|
|
12
|
+
}
|
|
13
|
+
function renderAgentResult(result, width) {
|
|
14
|
+
const lines = [];
|
|
15
|
+
const statusIcon = getResultStatusIcon(result.status);
|
|
16
|
+
const barWidth = Math.max(8, Math.min(20, width - 30));
|
|
17
|
+
lines.push({
|
|
18
|
+
type: 'agent-result',
|
|
19
|
+
text: ` ${statusIcon} ${result.agentName}`,
|
|
20
|
+
});
|
|
21
|
+
for (const cat of result.categories) {
|
|
22
|
+
const bar = renderScoreBar(cat.score, cat.maxScore, barWidth);
|
|
23
|
+
lines.push({
|
|
24
|
+
type: 'category',
|
|
25
|
+
text: ` ${padRight(cat.name, 16)} ${bar}`,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const totalBar = renderScoreBar(result.totalScore, result.maxTotalScore, barWidth);
|
|
29
|
+
lines.push({
|
|
30
|
+
type: 'total-score',
|
|
31
|
+
text: ` ${'Total'.padEnd(16)} ${totalBar}`,
|
|
32
|
+
});
|
|
33
|
+
return lines;
|
|
34
|
+
}
|
|
35
|
+
function getResultStatusIcon(status) {
|
|
36
|
+
switch (status) {
|
|
37
|
+
case 'pending':
|
|
38
|
+
return '⏳';
|
|
39
|
+
case 'in-progress':
|
|
40
|
+
return '🔄';
|
|
41
|
+
case 'done':
|
|
42
|
+
return '✅';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function padRight(str, len) {
|
|
46
|
+
return str.length >= len ? str.slice(0, len) : str + ' '.repeat(len - str.length);
|
|
47
|
+
}
|
|
48
|
+
function calculateAggregateScore(results) {
|
|
49
|
+
if (results.length === 0)
|
|
50
|
+
return { total: 0, max: 0, percent: 0 };
|
|
51
|
+
const total = results.reduce((sum, r) => sum + r.totalScore, 0);
|
|
52
|
+
const max = results.reduce((sum, r) => sum + r.maxTotalScore, 0);
|
|
53
|
+
const percent = max > 0 ? Math.round((total / max) * 100) : 0;
|
|
54
|
+
return { total, max, percent };
|
|
55
|
+
}
|
|
56
|
+
function renderEvalScreen(results, width) {
|
|
57
|
+
const lines = [];
|
|
58
|
+
lines.push({ type: 'header', text: '📊 Review Results' });
|
|
59
|
+
if (results.length === 0) {
|
|
60
|
+
lines.push({ type: 'empty', text: ' (no review results yet)' });
|
|
61
|
+
return lines;
|
|
62
|
+
}
|
|
63
|
+
for (const result of results) {
|
|
64
|
+
lines.push(...renderAgentResult(result, width));
|
|
65
|
+
lines.push({ type: 'empty', text: '' });
|
|
66
|
+
}
|
|
67
|
+
const agg = calculateAggregateScore(results);
|
|
68
|
+
const barWidth = Math.max(8, Math.min(20, width - 30));
|
|
69
|
+
lines.push({ type: 'header', text: '🏆 Aggregate Score' });
|
|
70
|
+
lines.push({
|
|
71
|
+
type: 'total-score',
|
|
72
|
+
text: ` ${renderScoreBar(agg.total, agg.max, barWidth)} (${agg.percent}%)`,
|
|
73
|
+
});
|
|
74
|
+
return lines;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=eval-screen.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-screen.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/eval-screen.pure.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,5 +14,19 @@ export { ActivityVisualizer, type ActivityVisualizerProps } from './ActivityVisu
|
|
|
14
14
|
export { renderAgentTree, renderAgentStatusCard } from './activity-visualizer.pure';
|
|
15
15
|
export { SessionTabBar } from './SessionTabBar';
|
|
16
16
|
export type { SessionTabBarProps } from './SessionTabBar';
|
|
17
|
+
export { PlanModeScreen } from './PlanModeScreen';
|
|
18
|
+
export type { PlanModeScreenProps } from './PlanModeScreen';
|
|
19
|
+
export { ActModeScreen } from './ActModeScreen';
|
|
20
|
+
export type { ActModeScreenProps } from './ActModeScreen';
|
|
21
|
+
export { EvalModeScreen } from './EvalModeScreen';
|
|
22
|
+
export type { EvalModeScreenProps } from './EvalModeScreen';
|
|
23
|
+
export { ModeScreenRouter, resolveModeScreen } from './ModeScreenRouter';
|
|
24
|
+
export type { ModeScreenRouterProps } from './ModeScreenRouter';
|
|
25
|
+
export { renderPlanScreen, renderAgentSummonList, renderConsensusSummary, } from './plan-screen.pure';
|
|
26
|
+
export { renderActScreen, renderTddPhaseBar, renderTddSteps, renderOverallProgress, renderProgressBar, } from './act-screen.pure';
|
|
27
|
+
export { renderEvalScreen, renderAgentResult, renderScoreBar, calculateAggregateScore, } from './eval-screen.pure';
|
|
17
28
|
export { formatElapsed, formatRelativeTime, spinnerFrame, pulseIcon, renderSparkline, computeThroughput, formatTimeWithSeconds, } from './live.pure';
|
|
18
29
|
export type { ActivitySample } from './live.pure';
|
|
30
|
+
export { SessionDashboard } from './SessionDashboard';
|
|
31
|
+
export type { SessionDashboardProps } from './SessionDashboard';
|
|
32
|
+
export { computeToolDistribution, computeAgentTimeline, computeTddCycleStats, renderBar, renderToolDistribution, renderAgentTimeline, renderTddStats, renderFileChangeStats, renderModeTransitions, renderSessionDashboard, formatDurationMs, } from './session-dashboard.pure';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.renderSparkline = exports.pulseIcon = exports.spinnerFrame = exports.formatRelativeTime = exports.formatElapsed = exports.calculateAggregateScore = exports.renderScoreBar = exports.renderAgentResult = exports.renderEvalScreen = exports.renderProgressBar = exports.renderOverallProgress = exports.renderTddSteps = exports.renderTddPhaseBar = exports.renderActScreen = exports.renderConsensusSummary = exports.renderAgentSummonList = exports.renderPlanScreen = exports.resolveModeScreen = exports.ModeScreenRouter = exports.EvalModeScreen = exports.ActModeScreen = exports.PlanModeScreen = exports.SessionTabBar = exports.renderAgentStatusCard = exports.renderAgentTree = exports.ActivityVisualizer = exports.computeGridLayout = exports.detectBottlenecks = exports.computeStageHealth = exports.StageHealthBar = exports.formatSectionDivider = exports.formatLogTailRelative = exports.formatLogTail = exports.formatObjective = exports.resolveChecklistTasks = exports.ChecklistPanel = exports.FocusedAgentPanel = exports.renderStanceHistory = exports.renderConsensusLine = exports.renderCrossReviewLine = exports.renderOpinionLine = exports.renderDiscussionPanel = exports.AgentDiscussionPanel = exports.layoutAgentNodes = exports.layoutStageColumns = exports.renderFlowMapCompact = exports.renderFlowMapSimplified = exports.renderFlowMap = exports.FlowMap = exports.HeaderBar = void 0;
|
|
4
|
+
exports.formatDurationMs = exports.renderSessionDashboard = exports.renderModeTransitions = exports.renderFileChangeStats = exports.renderTddStats = exports.renderAgentTimeline = exports.renderToolDistribution = exports.renderBar = exports.computeTddCycleStats = exports.computeAgentTimeline = exports.computeToolDistribution = exports.SessionDashboard = exports.formatTimeWithSeconds = exports.computeThroughput = void 0;
|
|
4
5
|
var HeaderBar_1 = require("./HeaderBar");
|
|
5
6
|
Object.defineProperty(exports, "HeaderBar", { enumerable: true, get: function () { return HeaderBar_1.HeaderBar; } });
|
|
6
7
|
var FlowMap_1 = require("./FlowMap");
|
|
@@ -44,6 +45,30 @@ Object.defineProperty(exports, "renderAgentTree", { enumerable: true, get: funct
|
|
|
44
45
|
Object.defineProperty(exports, "renderAgentStatusCard", { enumerable: true, get: function () { return activity_visualizer_pure_1.renderAgentStatusCard; } });
|
|
45
46
|
var SessionTabBar_1 = require("./SessionTabBar");
|
|
46
47
|
Object.defineProperty(exports, "SessionTabBar", { enumerable: true, get: function () { return SessionTabBar_1.SessionTabBar; } });
|
|
48
|
+
var PlanModeScreen_1 = require("./PlanModeScreen");
|
|
49
|
+
Object.defineProperty(exports, "PlanModeScreen", { enumerable: true, get: function () { return PlanModeScreen_1.PlanModeScreen; } });
|
|
50
|
+
var ActModeScreen_1 = require("./ActModeScreen");
|
|
51
|
+
Object.defineProperty(exports, "ActModeScreen", { enumerable: true, get: function () { return ActModeScreen_1.ActModeScreen; } });
|
|
52
|
+
var EvalModeScreen_1 = require("./EvalModeScreen");
|
|
53
|
+
Object.defineProperty(exports, "EvalModeScreen", { enumerable: true, get: function () { return EvalModeScreen_1.EvalModeScreen; } });
|
|
54
|
+
var ModeScreenRouter_1 = require("./ModeScreenRouter");
|
|
55
|
+
Object.defineProperty(exports, "ModeScreenRouter", { enumerable: true, get: function () { return ModeScreenRouter_1.ModeScreenRouter; } });
|
|
56
|
+
Object.defineProperty(exports, "resolveModeScreen", { enumerable: true, get: function () { return ModeScreenRouter_1.resolveModeScreen; } });
|
|
57
|
+
var plan_screen_pure_1 = require("./plan-screen.pure");
|
|
58
|
+
Object.defineProperty(exports, "renderPlanScreen", { enumerable: true, get: function () { return plan_screen_pure_1.renderPlanScreen; } });
|
|
59
|
+
Object.defineProperty(exports, "renderAgentSummonList", { enumerable: true, get: function () { return plan_screen_pure_1.renderAgentSummonList; } });
|
|
60
|
+
Object.defineProperty(exports, "renderConsensusSummary", { enumerable: true, get: function () { return plan_screen_pure_1.renderConsensusSummary; } });
|
|
61
|
+
var act_screen_pure_1 = require("./act-screen.pure");
|
|
62
|
+
Object.defineProperty(exports, "renderActScreen", { enumerable: true, get: function () { return act_screen_pure_1.renderActScreen; } });
|
|
63
|
+
Object.defineProperty(exports, "renderTddPhaseBar", { enumerable: true, get: function () { return act_screen_pure_1.renderTddPhaseBar; } });
|
|
64
|
+
Object.defineProperty(exports, "renderTddSteps", { enumerable: true, get: function () { return act_screen_pure_1.renderTddSteps; } });
|
|
65
|
+
Object.defineProperty(exports, "renderOverallProgress", { enumerable: true, get: function () { return act_screen_pure_1.renderOverallProgress; } });
|
|
66
|
+
Object.defineProperty(exports, "renderProgressBar", { enumerable: true, get: function () { return act_screen_pure_1.renderProgressBar; } });
|
|
67
|
+
var eval_screen_pure_1 = require("./eval-screen.pure");
|
|
68
|
+
Object.defineProperty(exports, "renderEvalScreen", { enumerable: true, get: function () { return eval_screen_pure_1.renderEvalScreen; } });
|
|
69
|
+
Object.defineProperty(exports, "renderAgentResult", { enumerable: true, get: function () { return eval_screen_pure_1.renderAgentResult; } });
|
|
70
|
+
Object.defineProperty(exports, "renderScoreBar", { enumerable: true, get: function () { return eval_screen_pure_1.renderScoreBar; } });
|
|
71
|
+
Object.defineProperty(exports, "calculateAggregateScore", { enumerable: true, get: function () { return eval_screen_pure_1.calculateAggregateScore; } });
|
|
47
72
|
var live_pure_1 = require("./live.pure");
|
|
48
73
|
Object.defineProperty(exports, "formatElapsed", { enumerable: true, get: function () { return live_pure_1.formatElapsed; } });
|
|
49
74
|
Object.defineProperty(exports, "formatRelativeTime", { enumerable: true, get: function () { return live_pure_1.formatRelativeTime; } });
|
|
@@ -52,4 +77,18 @@ Object.defineProperty(exports, "pulseIcon", { enumerable: true, get: function ()
|
|
|
52
77
|
Object.defineProperty(exports, "renderSparkline", { enumerable: true, get: function () { return live_pure_1.renderSparkline; } });
|
|
53
78
|
Object.defineProperty(exports, "computeThroughput", { enumerable: true, get: function () { return live_pure_1.computeThroughput; } });
|
|
54
79
|
Object.defineProperty(exports, "formatTimeWithSeconds", { enumerable: true, get: function () { return live_pure_1.formatTimeWithSeconds; } });
|
|
80
|
+
var SessionDashboard_1 = require("./SessionDashboard");
|
|
81
|
+
Object.defineProperty(exports, "SessionDashboard", { enumerable: true, get: function () { return SessionDashboard_1.SessionDashboard; } });
|
|
82
|
+
var session_dashboard_pure_1 = require("./session-dashboard.pure");
|
|
83
|
+
Object.defineProperty(exports, "computeToolDistribution", { enumerable: true, get: function () { return session_dashboard_pure_1.computeToolDistribution; } });
|
|
84
|
+
Object.defineProperty(exports, "computeAgentTimeline", { enumerable: true, get: function () { return session_dashboard_pure_1.computeAgentTimeline; } });
|
|
85
|
+
Object.defineProperty(exports, "computeTddCycleStats", { enumerable: true, get: function () { return session_dashboard_pure_1.computeTddCycleStats; } });
|
|
86
|
+
Object.defineProperty(exports, "renderBar", { enumerable: true, get: function () { return session_dashboard_pure_1.renderBar; } });
|
|
87
|
+
Object.defineProperty(exports, "renderToolDistribution", { enumerable: true, get: function () { return session_dashboard_pure_1.renderToolDistribution; } });
|
|
88
|
+
Object.defineProperty(exports, "renderAgentTimeline", { enumerable: true, get: function () { return session_dashboard_pure_1.renderAgentTimeline; } });
|
|
89
|
+
Object.defineProperty(exports, "renderTddStats", { enumerable: true, get: function () { return session_dashboard_pure_1.renderTddStats; } });
|
|
90
|
+
Object.defineProperty(exports, "renderFileChangeStats", { enumerable: true, get: function () { return session_dashboard_pure_1.renderFileChangeStats; } });
|
|
91
|
+
Object.defineProperty(exports, "renderModeTransitions", { enumerable: true, get: function () { return session_dashboard_pure_1.renderModeTransitions; } });
|
|
92
|
+
Object.defineProperty(exports, "renderSessionDashboard", { enumerable: true, get: function () { return session_dashboard_pure_1.renderSessionDashboard; } });
|
|
93
|
+
Object.defineProperty(exports, "formatDurationMs", { enumerable: true, get: function () { return session_dashboard_pure_1.formatDurationMs; } });
|
|
55
94
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/components/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/components/index.ts"],"names":[],"mappings":";;;;AAAA,yCAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,qCAAuD;AAA9C,kGAAA,OAAO,OAAA;AAChB,iDAMyB;AALvB,8GAAA,aAAa,OAAA;AACb,wHAAA,uBAAuB,OAAA;AACvB,qHAAA,oBAAoB,OAAA;AACpB,mHAAA,kBAAkB,OAAA;AAClB,iHAAA,gBAAgB,OAAA;AAElB,+DAA8F;AAArF,4HAAA,oBAAoB,OAAA;AAC7B,6EAMuC;AALrC,oIAAA,qBAAqB,OAAA;AACrB,gIAAA,iBAAiB,OAAA;AACjB,oIAAA,qBAAqB,OAAA;AACrB,kIAAA,mBAAmB,OAAA;AACnB,kIAAA,mBAAmB,OAAA;AAErB,yDAAqF;AAA5E,sHAAA,iBAAiB,OAAA;AAC1B,mDAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,+DAA+D;AAAtD,6HAAA,qBAAqB,OAAA;AAC9B,2DAK8B;AAJ5B,qHAAA,eAAe,OAAA;AACf,mHAAA,aAAa,OAAA;AACb,2HAAA,qBAAqB,OAAA;AACrB,0HAAA,oBAAoB,OAAA;AAEtB,mDAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,yDAA4E;AAAnE,uHAAA,kBAAkB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAC9C,uDAAuD;AAA9C,qHAAA,iBAAiB,OAAA;AAC1B,2DAAwF;AAA/E,wHAAA,kBAAkB,OAAA;AAC3B,uEAAoF;AAA3E,2HAAA,eAAe,OAAA;AAAE,iIAAA,qBAAqB,OAAA;AAC/C,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,uDAAyE;AAAhE,oHAAA,gBAAgB,OAAA;AAAE,qHAAA,iBAAiB,OAAA;AAE5C,uDAI4B;AAH1B,oHAAA,gBAAgB,OAAA;AAChB,yHAAA,qBAAqB,OAAA;AACrB,0HAAA,sBAAsB,OAAA;AAExB,qDAM2B;AALzB,kHAAA,eAAe,OAAA;AACf,oHAAA,iBAAiB,OAAA;AACjB,iHAAA,cAAc,OAAA;AACd,wHAAA,qBAAqB,OAAA;AACrB,oHAAA,iBAAiB,OAAA;AAEnB,uDAK4B;AAJ1B,oHAAA,gBAAgB,OAAA;AAChB,qHAAA,iBAAiB,OAAA;AACjB,kHAAA,cAAc,OAAA;AACd,2HAAA,uBAAuB,OAAA;AAEzB,yCAQqB;AAPnB,0GAAA,aAAa,OAAA;AACb,+GAAA,kBAAkB,OAAA;AAClB,yGAAA,YAAY,OAAA;AACZ,sGAAA,SAAS,OAAA;AACT,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,kHAAA,qBAAqB,OAAA;AAGvB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAEzB,mEAYkC;AAXhC,iIAAA,uBAAuB,OAAA;AACvB,8HAAA,oBAAoB,OAAA;AACpB,8HAAA,oBAAoB,OAAA;AACpB,mHAAA,SAAS,OAAA;AACT,gIAAA,sBAAsB,OAAA;AACtB,6HAAA,mBAAmB,OAAA;AACnB,wHAAA,cAAc,OAAA;AACd,+HAAA,qBAAqB,OAAA;AACrB,+HAAA,qBAAqB,OAAA;AACrB,gIAAA,sBAAsB,OAAA;AACtB,0HAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DashboardNode } from '../dashboard-types';
|
|
2
|
+
import type { DiscussionRound } from '../../collaboration/types';
|
|
3
|
+
export interface PlanScreenLine {
|
|
4
|
+
type: 'header' | 'agent' | 'discussion' | 'consensus' | 'empty';
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function renderAgentSummonList(agents: ReadonlyMap<string, DashboardNode>, width: number): PlanScreenLine[];
|
|
8
|
+
export declare function renderConsensusSummary(rounds: readonly DiscussionRound[]): PlanScreenLine[];
|
|
9
|
+
export declare function renderPlanScreen(agents: ReadonlyMap<string, DashboardNode>, rounds: readonly DiscussionRound[], width: number): PlanScreenLine[];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderAgentSummonList = renderAgentSummonList;
|
|
4
|
+
exports.renderConsensusSummary = renderConsensusSummary;
|
|
5
|
+
exports.renderPlanScreen = renderPlanScreen;
|
|
6
|
+
const types_1 = require("../../collaboration/types");
|
|
7
|
+
function renderAgentSummonList(agents, width) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push({ type: 'header', text: '📋 Summoned Agents' });
|
|
10
|
+
if (agents.size === 0) {
|
|
11
|
+
lines.push({ type: 'empty', text: ' (no agents summoned)' });
|
|
12
|
+
return lines;
|
|
13
|
+
}
|
|
14
|
+
for (const agent of agents.values()) {
|
|
15
|
+
const statusIcon = getAgentStatusIcon(agent.status);
|
|
16
|
+
const primaryTag = agent.isPrimary ? ' ★' : '';
|
|
17
|
+
const text = ` ${statusIcon} ${agent.name}${primaryTag} [${agent.status}]`;
|
|
18
|
+
lines.push({ type: 'agent', text: text.slice(0, width) });
|
|
19
|
+
}
|
|
20
|
+
return lines;
|
|
21
|
+
}
|
|
22
|
+
function getAgentStatusIcon(status) {
|
|
23
|
+
switch (status) {
|
|
24
|
+
case 'running':
|
|
25
|
+
return '🔄';
|
|
26
|
+
case 'done':
|
|
27
|
+
return '✅';
|
|
28
|
+
case 'error':
|
|
29
|
+
return '❌';
|
|
30
|
+
case 'idle':
|
|
31
|
+
return '⏳';
|
|
32
|
+
case 'blocked':
|
|
33
|
+
return '🚫';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function renderConsensusSummary(rounds) {
|
|
37
|
+
if (rounds.length === 0) {
|
|
38
|
+
return [{ type: 'empty', text: ' (no discussion yet)' }];
|
|
39
|
+
}
|
|
40
|
+
const lastRound = rounds[rounds.length - 1];
|
|
41
|
+
const consensus = (0, types_1.calculateConsensus)(lastRound.opinions);
|
|
42
|
+
const lines = [];
|
|
43
|
+
lines.push({ type: 'header', text: `🗳️ Consensus (Round ${lastRound.roundNumber})` });
|
|
44
|
+
lines.push({
|
|
45
|
+
type: 'consensus',
|
|
46
|
+
text: ` ${types_1.STANCE_ICONS.approve} ${consensus.approveCount} ${types_1.STANCE_ICONS.concern} ${consensus.concernCount} ${types_1.STANCE_ICONS.reject} ${consensus.rejectCount}`,
|
|
47
|
+
});
|
|
48
|
+
lines.push({
|
|
49
|
+
type: 'consensus',
|
|
50
|
+
text: consensus.reached ? ' ✅ Consensus reached' : ' ⏳ Consensus not reached',
|
|
51
|
+
});
|
|
52
|
+
return lines;
|
|
53
|
+
}
|
|
54
|
+
function renderPlanScreen(agents, rounds, width) {
|
|
55
|
+
const lines = [];
|
|
56
|
+
lines.push(...renderAgentSummonList(agents, width));
|
|
57
|
+
lines.push({ type: 'empty', text: '' });
|
|
58
|
+
lines.push(...renderConsensusSummary(rounds));
|
|
59
|
+
return lines;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=plan-screen.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-screen.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/plan-screen.pure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ToolCallRecord, TddStep, ModeTransition, FileChangeStats } from '../dashboard-types';
|
|
2
|
+
import type { DashboardNode } from '../dashboard-types';
|
|
3
|
+
import type { LayoutMode } from '../dashboard-types';
|
|
4
|
+
export interface ToolDistributionEntry {
|
|
5
|
+
name: string;
|
|
6
|
+
count: number;
|
|
7
|
+
pct: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function computeToolDistribution(toolCalls: ToolCallRecord[]): ToolDistributionEntry[];
|
|
10
|
+
export interface AgentTimelineEntry {
|
|
11
|
+
name: string;
|
|
12
|
+
startedAt: number;
|
|
13
|
+
durationMs: number;
|
|
14
|
+
status: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function computeAgentTimeline(agents: Map<string, DashboardNode>, now: number): AgentTimelineEntry[];
|
|
17
|
+
export interface TddCycleStats {
|
|
18
|
+
red: number;
|
|
19
|
+
green: number;
|
|
20
|
+
refactor: number;
|
|
21
|
+
cycles: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function computeTddCycleStats(tddSteps: TddStep[]): TddCycleStats;
|
|
24
|
+
export declare function renderBar(pct: number, maxWidth: number): string;
|
|
25
|
+
export declare function renderToolDistribution(entries: ToolDistributionEntry[], width: number, maxItems?: number): string[];
|
|
26
|
+
export declare function formatDurationMs(ms: number): string;
|
|
27
|
+
export declare function renderAgentTimeline(entries: AgentTimelineEntry[], _width: number): string[];
|
|
28
|
+
export declare function renderTddStats(stats: TddCycleStats): string[];
|
|
29
|
+
export declare function renderFileChangeStats(stats: FileChangeStats): string;
|
|
30
|
+
export declare function renderModeTransitions(transitions: ModeTransition[], sessionStartedAt: number): string[];
|
|
31
|
+
export declare function renderSessionDashboard(params: {
|
|
32
|
+
toolDistribution: ToolDistributionEntry[];
|
|
33
|
+
agentTimeline: AgentTimelineEntry[];
|
|
34
|
+
tddStats: TddCycleStats;
|
|
35
|
+
fileChanges: FileChangeStats;
|
|
36
|
+
modeTransitions: ModeTransition[];
|
|
37
|
+
sessionStartedAt: number;
|
|
38
|
+
sessionDuration: string;
|
|
39
|
+
totalToolCalls: number;
|
|
40
|
+
totalAgents: number;
|
|
41
|
+
width: number;
|
|
42
|
+
layoutMode: LayoutMode;
|
|
43
|
+
}): string[];
|