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
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeToolDistribution = computeToolDistribution;
|
|
4
|
+
exports.computeAgentTimeline = computeAgentTimeline;
|
|
5
|
+
exports.computeTddCycleStats = computeTddCycleStats;
|
|
6
|
+
exports.renderBar = renderBar;
|
|
7
|
+
exports.renderToolDistribution = renderToolDistribution;
|
|
8
|
+
exports.formatDurationMs = formatDurationMs;
|
|
9
|
+
exports.renderAgentTimeline = renderAgentTimeline;
|
|
10
|
+
exports.renderTddStats = renderTddStats;
|
|
11
|
+
exports.renderFileChangeStats = renderFileChangeStats;
|
|
12
|
+
exports.renderModeTransitions = renderModeTransitions;
|
|
13
|
+
exports.renderSessionDashboard = renderSessionDashboard;
|
|
14
|
+
function computeToolDistribution(toolCalls) {
|
|
15
|
+
if (toolCalls.length === 0)
|
|
16
|
+
return [];
|
|
17
|
+
const counts = new Map();
|
|
18
|
+
for (const tc of toolCalls) {
|
|
19
|
+
counts.set(tc.toolName, (counts.get(tc.toolName) ?? 0) + 1);
|
|
20
|
+
}
|
|
21
|
+
const total = toolCalls.length;
|
|
22
|
+
return [...counts.entries()]
|
|
23
|
+
.map(([name, count]) => ({ name, count, pct: Math.round((count / total) * 100) }))
|
|
24
|
+
.sort((a, b) => b.count - a.count);
|
|
25
|
+
}
|
|
26
|
+
function computeAgentTimeline(agents, now) {
|
|
27
|
+
const entries = [];
|
|
28
|
+
for (const agent of agents.values()) {
|
|
29
|
+
if (agent.startedAt === undefined)
|
|
30
|
+
continue;
|
|
31
|
+
const end = agent.completedAt ?? now;
|
|
32
|
+
entries.push({
|
|
33
|
+
name: agent.name,
|
|
34
|
+
startedAt: agent.startedAt,
|
|
35
|
+
durationMs: end - agent.startedAt,
|
|
36
|
+
status: agent.status,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return entries.sort((a, b) => a.startedAt - b.startedAt);
|
|
40
|
+
}
|
|
41
|
+
function computeTddCycleStats(tddSteps) {
|
|
42
|
+
let red = 0;
|
|
43
|
+
let green = 0;
|
|
44
|
+
let refactor = 0;
|
|
45
|
+
for (const step of tddSteps) {
|
|
46
|
+
switch (step.phase) {
|
|
47
|
+
case 'RED':
|
|
48
|
+
red++;
|
|
49
|
+
break;
|
|
50
|
+
case 'GREEN':
|
|
51
|
+
green++;
|
|
52
|
+
break;
|
|
53
|
+
case 'REFACTOR':
|
|
54
|
+
refactor++;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const cycles = Math.min(red, green, refactor);
|
|
59
|
+
return { red, green, refactor, cycles };
|
|
60
|
+
}
|
|
61
|
+
const BAR_CHARS = { filled: '█', empty: '░' };
|
|
62
|
+
function renderBar(pct, maxWidth) {
|
|
63
|
+
const filled = Math.round((pct / 100) * maxWidth);
|
|
64
|
+
const empty = maxWidth - filled;
|
|
65
|
+
return BAR_CHARS.filled.repeat(filled) + BAR_CHARS.empty.repeat(empty);
|
|
66
|
+
}
|
|
67
|
+
function renderToolDistribution(entries, width, maxItems = 8) {
|
|
68
|
+
if (entries.length === 0)
|
|
69
|
+
return [' (no tool calls)'];
|
|
70
|
+
const visible = entries.slice(0, maxItems);
|
|
71
|
+
const nameWidth = Math.min(14, Math.max(...visible.map(e => e.name.length)));
|
|
72
|
+
const countWidth = String(visible[0].count).length;
|
|
73
|
+
const barWidth = Math.max(6, width - nameWidth - countWidth - 12);
|
|
74
|
+
return visible.map(e => {
|
|
75
|
+
const name = e.name.padEnd(nameWidth).slice(0, nameWidth);
|
|
76
|
+
const bar = renderBar(e.pct, barWidth);
|
|
77
|
+
const count = String(e.count).padStart(countWidth);
|
|
78
|
+
return ` ${name} ${bar} ${count} (${String(e.pct).padStart(2)}%)`;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function formatDurationMs(ms) {
|
|
82
|
+
const totalSec = Math.max(0, Math.floor(ms / 1000));
|
|
83
|
+
const min = Math.floor(totalSec / 60);
|
|
84
|
+
const sec = totalSec % 60;
|
|
85
|
+
if (min > 0)
|
|
86
|
+
return `${min}m ${sec}s`;
|
|
87
|
+
return `${sec}s`;
|
|
88
|
+
}
|
|
89
|
+
function renderAgentTimeline(entries, _width) {
|
|
90
|
+
if (entries.length === 0)
|
|
91
|
+
return [' (no agents)'];
|
|
92
|
+
const nameWidth = Math.min(20, Math.max(...entries.map(e => e.name.length)));
|
|
93
|
+
const statusIcons = {
|
|
94
|
+
running: '●',
|
|
95
|
+
done: '✓',
|
|
96
|
+
error: '!',
|
|
97
|
+
idle: '○',
|
|
98
|
+
blocked: '⏸',
|
|
99
|
+
};
|
|
100
|
+
return entries.slice(0, 10).map(e => {
|
|
101
|
+
const icon = statusIcons[e.status] ?? '○';
|
|
102
|
+
const name = e.name.padEnd(nameWidth).slice(0, nameWidth);
|
|
103
|
+
const dur = formatDurationMs(e.durationMs);
|
|
104
|
+
return ` ${icon} ${name} ${dur}`;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function renderTddStats(stats) {
|
|
108
|
+
if (stats.red === 0 && stats.green === 0 && stats.refactor === 0) {
|
|
109
|
+
return [' (no TDD activity)'];
|
|
110
|
+
}
|
|
111
|
+
const total = stats.red + stats.green + stats.refactor;
|
|
112
|
+
const redPct = total > 0 ? Math.round((stats.red / total) * 100) : 0;
|
|
113
|
+
const greenPct = total > 0 ? Math.round((stats.green / total) * 100) : 0;
|
|
114
|
+
const refactorPct = total > 0 ? Math.round((stats.refactor / total) * 100) : 0;
|
|
115
|
+
return [
|
|
116
|
+
` Cycles: ${stats.cycles} complete`,
|
|
117
|
+
` RED:${String(stats.red).padStart(3)} (${String(redPct).padStart(2)}%) GREEN:${String(stats.green).padStart(3)} (${String(greenPct).padStart(2)}%) REFACTOR:${String(stats.refactor).padStart(3)} (${String(refactorPct).padStart(2)}%)`,
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
function renderFileChangeStats(stats) {
|
|
121
|
+
const parts = [];
|
|
122
|
+
if (stats.created > 0)
|
|
123
|
+
parts.push(`+${stats.created} created`);
|
|
124
|
+
if (stats.modified > 0)
|
|
125
|
+
parts.push(`~${stats.modified} modified`);
|
|
126
|
+
if (stats.deleted > 0)
|
|
127
|
+
parts.push(`-${stats.deleted} deleted`);
|
|
128
|
+
if (parts.length === 0)
|
|
129
|
+
return ' (no file changes)';
|
|
130
|
+
return ` ${parts.join(' ')}`;
|
|
131
|
+
}
|
|
132
|
+
function renderModeTransitions(transitions, sessionStartedAt) {
|
|
133
|
+
if (transitions.length === 0)
|
|
134
|
+
return [' (no mode changes)'];
|
|
135
|
+
return transitions.slice(-8).map(t => {
|
|
136
|
+
const elapsed = formatDurationMs(t.timestamp - sessionStartedAt);
|
|
137
|
+
const from = t.from ?? 'START';
|
|
138
|
+
return ` ${elapsed.padStart(7)} ${from} → ${t.to}`;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function renderSessionDashboard(params) {
|
|
142
|
+
const { toolDistribution, agentTimeline, tddStats, fileChanges, modeTransitions, sessionDuration, sessionStartedAt, totalToolCalls, totalAgents, width, layoutMode, } = params;
|
|
143
|
+
const lines = [];
|
|
144
|
+
const divider = (title) => {
|
|
145
|
+
const pad = Math.max(0, width - title.length - 6);
|
|
146
|
+
return `── ${title} ${'─'.repeat(pad)}`;
|
|
147
|
+
};
|
|
148
|
+
lines.push(divider(`Session Analytics (${sessionDuration})`));
|
|
149
|
+
lines.push(` Tools: ${totalToolCalls} Agents: ${totalAgents}`);
|
|
150
|
+
lines.push('');
|
|
151
|
+
if (layoutMode === 'narrow') {
|
|
152
|
+
lines.push(divider('Tools'));
|
|
153
|
+
lines.push(...renderToolDistribution(toolDistribution, width - 4, 5));
|
|
154
|
+
lines.push('');
|
|
155
|
+
lines.push(divider('TDD'));
|
|
156
|
+
lines.push(...renderTddStats(tddStats));
|
|
157
|
+
lines.push('');
|
|
158
|
+
lines.push(divider('Files'));
|
|
159
|
+
lines.push(renderFileChangeStats(fileChanges));
|
|
160
|
+
lines.push('');
|
|
161
|
+
lines.push(divider('Modes'));
|
|
162
|
+
lines.push(...renderModeTransitions(modeTransitions, sessionStartedAt));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
lines.push(divider('Tool Distribution'));
|
|
166
|
+
lines.push(...renderToolDistribution(toolDistribution, Math.floor(width / 2), 8));
|
|
167
|
+
lines.push('');
|
|
168
|
+
lines.push(divider('Agent Timeline'));
|
|
169
|
+
lines.push(...renderAgentTimeline(agentTimeline, width));
|
|
170
|
+
lines.push('');
|
|
171
|
+
lines.push(divider('TDD Cycles'));
|
|
172
|
+
lines.push(...renderTddStats(tddStats));
|
|
173
|
+
lines.push('');
|
|
174
|
+
lines.push(divider('File Changes'));
|
|
175
|
+
lines.push(renderFileChangeStats(fileChanges));
|
|
176
|
+
lines.push('');
|
|
177
|
+
lines.push(divider('Mode Transitions'));
|
|
178
|
+
lines.push(...renderModeTransitions(modeTransitions, sessionStartedAt));
|
|
179
|
+
}
|
|
180
|
+
return lines;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=session-dashboard.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-dashboard.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/session-dashboard.pure.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,7 @@ const use_terminal_size_1 = require("./hooks/use-terminal-size");
|
|
|
7
7
|
const use_tick_1 = require("./hooks/use-tick");
|
|
8
8
|
const use_dashboard_state_1 = require("./hooks/use-dashboard-state");
|
|
9
9
|
const HeaderBar_1 = require("./components/HeaderBar");
|
|
10
|
-
const
|
|
11
|
-
const AgentDiscussionPanel_1 = require("./components/AgentDiscussionPanel");
|
|
10
|
+
const ModeScreenRouter_1 = require("./components/ModeScreenRouter");
|
|
12
11
|
const FocusedAgentPanel_1 = require("./components/FocusedAgentPanel");
|
|
13
12
|
const ChecklistPanel_1 = require("./components/ChecklistPanel");
|
|
14
13
|
const StageHealthBar_1 = require("./components/StageHealthBar");
|
|
@@ -32,9 +31,9 @@ function DashboardApp({ eventBus, externalState, workspace: workspaceProp, }) {
|
|
|
32
31
|
layoutMode === 'narrow' ? (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
|
|
33
32
|
grid.checklistPanel.height > 0 && (react_1.default.createElement(ChecklistPanel_1.ChecklistPanel, { tasks: state.tasks, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.checklistPanel.width, height: grid.checklistPanel.height })),
|
|
34
33
|
react_1.default.createElement(FocusedAgentPanel_1.FocusedAgentPanel, { agent: focusedAgent, objectives: state.objectives, activeSkills: state.activeSkills, eventLog: state.eventLog, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.focusedAgent.width, height: grid.focusedAgent.height, tick: tick, now: now }),
|
|
35
|
-
|
|
34
|
+
react_1.default.createElement(ModeScreenRouter_1.ModeScreenRouter, { state: state, layoutMode: layoutMode, width: grid.flowMap.width, height: grid.flowMap.height, tick: tick, now: now }))) : (react_1.default.createElement(ink_1.Box, { flexDirection: "row", width: grid.total.width, height: grid.checklistPanel.height + grid.focusedAgent.height },
|
|
36
35
|
react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: grid.flowMap.width },
|
|
37
|
-
|
|
36
|
+
react_1.default.createElement(ModeScreenRouter_1.ModeScreenRouter, { state: state, layoutMode: layoutMode, width: grid.flowMap.width, height: grid.flowMap.height, tick: tick, now: now }),
|
|
38
37
|
react_1.default.createElement(ActivityVisualizer_1.ActivityVisualizer, { currentMode: state.currentMode, focusedAgent: focusedAgent, agents: state.agents, edges: state.edges, activeSkills: state.activeSkills, objectives: state.objectives, width: grid.monitorPanel.width, height: grid.monitorPanel.height })),
|
|
39
38
|
react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: grid.checklistPanel.width },
|
|
40
39
|
react_1.default.createElement(ChecklistPanel_1.ChecklistPanel, { tasks: state.tasks, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.checklistPanel.width, height: grid.checklistPanel.height }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-app.js","sourceRoot":"","sources":["../../../src/tui/dashboard-app.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"dashboard-app.js","sourceRoot":"","sources":["../../../src/tui/dashboard-app.tsx"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,31 @@ export interface ToolCallRecord {
|
|
|
57
57
|
timestamp: number;
|
|
58
58
|
status: ToolCallStatus;
|
|
59
59
|
}
|
|
60
|
+
export type TddPhase = 'RED' | 'GREEN' | 'REFACTOR';
|
|
61
|
+
export declare const TDD_PHASES: readonly TddPhase[];
|
|
62
|
+
export interface TddStep {
|
|
63
|
+
id: string;
|
|
64
|
+
label: string;
|
|
65
|
+
phase: TddPhase;
|
|
66
|
+
agentId: string | null;
|
|
67
|
+
status: 'pending' | 'active' | 'done' | 'failed';
|
|
68
|
+
}
|
|
69
|
+
export declare function createDefaultTddStep(params: Pick<TddStep, 'id' | 'label' | 'phase'> & Partial<Omit<TddStep, 'id' | 'label' | 'phase'>>): TddStep;
|
|
70
|
+
export interface ReviewCategory {
|
|
71
|
+
name: string;
|
|
72
|
+
score: number;
|
|
73
|
+
maxScore: number;
|
|
74
|
+
}
|
|
75
|
+
export interface AgentReviewResult {
|
|
76
|
+
agentId: string;
|
|
77
|
+
agentName: string;
|
|
78
|
+
categories: ReviewCategory[];
|
|
79
|
+
totalScore: number;
|
|
80
|
+
maxTotalScore: number;
|
|
81
|
+
status: 'pending' | 'in-progress' | 'done';
|
|
82
|
+
}
|
|
83
|
+
export declare function createDefaultReviewResult(params: Pick<AgentReviewResult, 'agentId' | 'agentName'> & Partial<Omit<AgentReviewResult, 'agentId' | 'agentName'>>): AgentReviewResult;
|
|
84
|
+
export type ConnectionStatus = 'connected' | 'disconnected' | 'reconnecting';
|
|
60
85
|
export interface DashboardState {
|
|
61
86
|
workspace: string;
|
|
62
87
|
sessionId: string;
|
|
@@ -83,6 +108,28 @@ export interface DashboardState {
|
|
|
83
108
|
contextMode: string | null;
|
|
84
109
|
contextStatus: string | null;
|
|
85
110
|
discussionRounds: DiscussionRound[];
|
|
111
|
+
tddCurrentPhase: TddPhase | null;
|
|
112
|
+
tddSteps: TddStep[];
|
|
113
|
+
reviewResults: AgentReviewResult[];
|
|
114
|
+
connectionStatus: ConnectionStatus;
|
|
115
|
+
sessionStartedAt: number;
|
|
116
|
+
modeTransitions: ModeTransition[];
|
|
117
|
+
fileChanges: FileChangeStats;
|
|
118
|
+
}
|
|
119
|
+
export interface ModeTransition {
|
|
120
|
+
from: Mode | null;
|
|
121
|
+
to: Mode;
|
|
122
|
+
timestamp: number;
|
|
123
|
+
}
|
|
124
|
+
export interface FileChangeStats {
|
|
125
|
+
created: number;
|
|
126
|
+
modified: number;
|
|
127
|
+
deleted: number;
|
|
128
|
+
}
|
|
129
|
+
export interface SessionAnalytics {
|
|
130
|
+
sessionStartedAt: number;
|
|
131
|
+
modeTransitions: ModeTransition[];
|
|
132
|
+
fileChanges: FileChangeStats;
|
|
86
133
|
}
|
|
87
134
|
export interface GridRegion {
|
|
88
135
|
x: number;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DASHBOARD_NODE_STATUSES = void 0;
|
|
3
|
+
exports.TDD_PHASES = exports.DASHBOARD_NODE_STATUSES = void 0;
|
|
4
4
|
exports.getLayoutMode = getLayoutMode;
|
|
5
5
|
exports.createDefaultDashboardNode = createDefaultDashboardNode;
|
|
6
6
|
exports.createEmptyStageStats = createEmptyStageStats;
|
|
7
|
+
exports.createDefaultTddStep = createDefaultTddStep;
|
|
8
|
+
exports.createDefaultReviewResult = createDefaultReviewResult;
|
|
7
9
|
function getLayoutMode(columns) {
|
|
8
10
|
if (columns < 80)
|
|
9
11
|
return 'narrow';
|
|
@@ -30,4 +32,21 @@ function createDefaultDashboardNode(params) {
|
|
|
30
32
|
function createEmptyStageStats() {
|
|
31
33
|
return { running: 0, blocked: 0, waiting: 0, done: 0, error: 0 };
|
|
32
34
|
}
|
|
35
|
+
exports.TDD_PHASES = Object.freeze(['RED', 'GREEN', 'REFACTOR']);
|
|
36
|
+
function createDefaultTddStep(params) {
|
|
37
|
+
return {
|
|
38
|
+
agentId: null,
|
|
39
|
+
status: 'pending',
|
|
40
|
+
...params,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function createDefaultReviewResult(params) {
|
|
44
|
+
return {
|
|
45
|
+
categories: [],
|
|
46
|
+
totalScore: 0,
|
|
47
|
+
maxTotalScore: 100,
|
|
48
|
+
status: 'pending',
|
|
49
|
+
...params,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
33
52
|
//# sourceMappingURL=dashboard-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-types.js","sourceRoot":"","sources":["../../../src/tui/dashboard-types.ts"],"names":[],"mappings":";;;AAiBA,sCAIC;AAmCD,gEAUC;AAuDD,sDAEC;
|
|
1
|
+
{"version":3,"file":"dashboard-types.js","sourceRoot":"","sources":["../../../src/tui/dashboard-types.ts"],"names":[],"mappings":";;;AAiBA,sCAIC;AAmCD,gEAUC;AAuDD,sDAEC;AAsDD,oDASC;AA0BD,8DAWC;AA9MD,SAAgB,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAKY,QAAA,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,SAAS;IACT,MAAM;IACN,SAAS;IACT,OAAO;IACP,MAAM;CACE,CAAC,CAAC;AAwBZ,SAAgB,0BAA0B,CACxC,MAAqD;IAErD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,KAAK;QACjB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAuDD,SAAgB,qBAAqB;IACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC;AAsCY,QAAA,UAAU,GAAwB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAgB3F,SAAgB,oBAAoB,CAClC,MACkD;IAElD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,SAAS;QACjB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AA0BD,SAAgB,yBAAyB,CACvC,MAC2D;IAE3D,OAAO;QACL,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,GAAG;QAClB,MAAM,EAAE,SAAS;QACjB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -3,5 +3,5 @@ export { TuiInterceptor } from './tui-interceptor';
|
|
|
3
3
|
export { parseAgentFromToolName } from './parse-agent';
|
|
4
4
|
export { AgentMetadataService } from './agent-metadata.service';
|
|
5
5
|
export { TuiEventsModule } from './events.module';
|
|
6
|
-
export { TUI_EVENTS, type TuiEventName, type TuiEventMap, type AgentActivatedEvent, type AgentDeactivatedEvent, type ModeChangedEvent, type SkillRecommendedEvent, type ParallelStartedEvent, type ParallelCompletedEvent, type AgentsLoadedEvent, type AgentRelationshipEvent, type TaskSyncedEvent, type ToolInvokedEvent, type ObjectiveSetEvent, type SessionResetEvent, type ContextUpdatedEvent, type DiscussionRoundAddedEvent, } from './types';
|
|
6
|
+
export { TUI_EVENTS, type TuiEventName, type TuiEventMap, type AgentActivatedEvent, type AgentDeactivatedEvent, type ModeChangedEvent, type SkillRecommendedEvent, type ParallelStartedEvent, type ParallelCompletedEvent, type AgentsLoadedEvent, type AgentRelationshipEvent, type TaskSyncedEvent, type ToolInvokedEvent, type ObjectiveSetEvent, type SessionResetEvent, type ContextUpdatedEvent, type DiscussionRoundAddedEvent, type TddPhaseChangedEvent, type TddStepUpdatedEvent, type ReviewResultAddedEvent, type ConnectionStatusChangedEvent, } from './types';
|
|
7
7
|
export { type AgentMetadata, type AgentCategory, AGENT_CATEGORY_MAP, AGENT_ICONS, } from './agent-metadata.types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/events/index.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6CAAuD;AAA9C,qHAAA,sBAAsB,OAAA;AAC/B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,iDAAkD;AAAzC,gHAAA,eAAe,OAAA;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/events/index.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6CAAuD;AAA9C,qHAAA,sBAAsB,OAAA;AAC/B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,iDAAkD;AAAzC,gHAAA,eAAe,OAAA;AACxB,iCAsBiB;AArBf,mGAAA,UAAU,OAAA;AAsBZ,+DAKgC;AAF9B,0HAAA,kBAAkB,OAAA;AAClB,mHAAA,WAAW,OAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Mode } from '../types';
|
|
2
|
-
import type { EdgeType } from '../dashboard-types';
|
|
2
|
+
import type { EdgeType, TddPhase, TddStep, AgentReviewResult, ConnectionStatus } from '../dashboard-types';
|
|
3
3
|
import type { DiscussionRound } from '../../collaboration/types';
|
|
4
4
|
import type { AgentMetadata } from './agent-metadata.types';
|
|
5
5
|
export declare const TUI_EVENTS: Readonly<{
|
|
@@ -17,6 +17,10 @@ export declare const TUI_EVENTS: Readonly<{
|
|
|
17
17
|
readonly SESSION_RESET: "session:reset";
|
|
18
18
|
readonly CONTEXT_UPDATED: "context:updated";
|
|
19
19
|
readonly DISCUSSION_ROUND_ADDED: "discussion:round-added";
|
|
20
|
+
readonly TDD_PHASE_CHANGED: "tdd:phase-changed";
|
|
21
|
+
readonly TDD_STEP_UPDATED: "tdd:step-updated";
|
|
22
|
+
readonly REVIEW_RESULT_ADDED: "review:result-added";
|
|
23
|
+
readonly CONNECTION_STATUS_CHANGED: "connection:status-changed";
|
|
20
24
|
}>;
|
|
21
25
|
export type TuiEventName = (typeof TUI_EVENTS)[keyof typeof TUI_EVENTS];
|
|
22
26
|
export interface AgentActivatedEvent {
|
|
@@ -83,6 +87,20 @@ export interface ContextUpdatedEvent {
|
|
|
83
87
|
export interface DiscussionRoundAddedEvent {
|
|
84
88
|
round: DiscussionRound;
|
|
85
89
|
}
|
|
90
|
+
export interface TddPhaseChangedEvent {
|
|
91
|
+
phase: TddPhase;
|
|
92
|
+
previousPhase: TddPhase | null;
|
|
93
|
+
}
|
|
94
|
+
export interface TddStepUpdatedEvent {
|
|
95
|
+
step: TddStep;
|
|
96
|
+
}
|
|
97
|
+
export interface ReviewResultAddedEvent {
|
|
98
|
+
result: AgentReviewResult;
|
|
99
|
+
}
|
|
100
|
+
export interface ConnectionStatusChangedEvent {
|
|
101
|
+
status: ConnectionStatus;
|
|
102
|
+
reason?: string;
|
|
103
|
+
}
|
|
86
104
|
export interface TuiEventMap {
|
|
87
105
|
[TUI_EVENTS.AGENT_ACTIVATED]: AgentActivatedEvent;
|
|
88
106
|
[TUI_EVENTS.AGENT_DEACTIVATED]: AgentDeactivatedEvent;
|
|
@@ -98,4 +116,8 @@ export interface TuiEventMap {
|
|
|
98
116
|
[TUI_EVENTS.SESSION_RESET]: SessionResetEvent;
|
|
99
117
|
[TUI_EVENTS.CONTEXT_UPDATED]: ContextUpdatedEvent;
|
|
100
118
|
[TUI_EVENTS.DISCUSSION_ROUND_ADDED]: DiscussionRoundAddedEvent;
|
|
119
|
+
[TUI_EVENTS.TDD_PHASE_CHANGED]: TddPhaseChangedEvent;
|
|
120
|
+
[TUI_EVENTS.TDD_STEP_UPDATED]: TddStepUpdatedEvent;
|
|
121
|
+
[TUI_EVENTS.REVIEW_RESULT_ADDED]: ReviewResultAddedEvent;
|
|
122
|
+
[TUI_EVENTS.CONNECTION_STATUS_CHANGED]: ConnectionStatusChangedEvent;
|
|
101
123
|
}
|
|
@@ -16,5 +16,9 @@ exports.TUI_EVENTS = Object.freeze({
|
|
|
16
16
|
SESSION_RESET: 'session:reset',
|
|
17
17
|
CONTEXT_UPDATED: 'context:updated',
|
|
18
18
|
DISCUSSION_ROUND_ADDED: 'discussion:round-added',
|
|
19
|
+
TDD_PHASE_CHANGED: 'tdd:phase-changed',
|
|
20
|
+
TDD_STEP_UPDATED: 'tdd:step-updated',
|
|
21
|
+
REVIEW_RESULT_ADDED: 'review:result-added',
|
|
22
|
+
CONNECTION_STATUS_CHANGED: 'connection:status-changed',
|
|
19
23
|
});
|
|
20
24
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/tui/events/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/tui/events/types.ts"],"names":[],"mappings":";;;AAqBa,QAAA,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,sBAAsB,EAAE,wBAAwB;IAChD,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,yBAAyB,EAAE,2BAA2B;CAC9C,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DashboardState } from '../dashboard-types';
|
|
2
2
|
import type { TuiEventBus } from '../events';
|
|
3
|
-
import { type AgentActivatedEvent, type AgentDeactivatedEvent, type ModeChangedEvent, type SkillRecommendedEvent, type ParallelStartedEvent, type ParallelCompletedEvent, type AgentsLoadedEvent, type AgentRelationshipEvent, type TaskSyncedEvent, type ToolInvokedEvent, type ObjectiveSetEvent, type SessionResetEvent, type ContextUpdatedEvent, type DiscussionRoundAddedEvent } from '../events';
|
|
3
|
+
import { type AgentActivatedEvent, type AgentDeactivatedEvent, type ModeChangedEvent, type SkillRecommendedEvent, type ParallelStartedEvent, type ParallelCompletedEvent, type AgentsLoadedEvent, type AgentRelationshipEvent, type TaskSyncedEvent, type ToolInvokedEvent, type ObjectiveSetEvent, type SessionResetEvent, type ContextUpdatedEvent, type DiscussionRoundAddedEvent, type TddPhaseChangedEvent, type TddStepUpdatedEvent, type ReviewResultAddedEvent, type ConnectionStatusChangedEvent } from '../events';
|
|
4
4
|
export declare function createInitialDashboardState(): DashboardState;
|
|
5
5
|
export type DashboardAction = {
|
|
6
6
|
type: 'AGENT_ACTIVATED';
|
|
@@ -44,6 +44,18 @@ export type DashboardAction = {
|
|
|
44
44
|
} | {
|
|
45
45
|
type: 'ADD_DISCUSSION_ROUND';
|
|
46
46
|
payload: DiscussionRoundAddedEvent;
|
|
47
|
+
} | {
|
|
48
|
+
type: 'TDD_PHASE_CHANGED';
|
|
49
|
+
payload: TddPhaseChangedEvent;
|
|
50
|
+
} | {
|
|
51
|
+
type: 'TDD_STEP_UPDATED';
|
|
52
|
+
payload: TddStepUpdatedEvent;
|
|
53
|
+
} | {
|
|
54
|
+
type: 'REVIEW_RESULT_ADDED';
|
|
55
|
+
payload: ReviewResultAddedEvent;
|
|
56
|
+
} | {
|
|
57
|
+
type: 'CONNECTION_STATUS_CHANGED';
|
|
58
|
+
payload: ConnectionStatusChangedEvent;
|
|
47
59
|
} | {
|
|
48
60
|
type: 'CLEANUP_STALE_AGENTS';
|
|
49
61
|
payload: {
|
|
@@ -34,6 +34,13 @@ function createInitialDashboardState() {
|
|
|
34
34
|
contextMode: null,
|
|
35
35
|
contextStatus: null,
|
|
36
36
|
discussionRounds: [],
|
|
37
|
+
tddCurrentPhase: null,
|
|
38
|
+
tddSteps: [],
|
|
39
|
+
reviewResults: [],
|
|
40
|
+
connectionStatus: 'connected',
|
|
41
|
+
sessionStartedAt: Date.now(),
|
|
42
|
+
modeTransitions: [],
|
|
43
|
+
fileChanges: { created: 0, modified: 0, deleted: 0 },
|
|
37
44
|
};
|
|
38
45
|
}
|
|
39
46
|
function cloneAgents(agents) {
|
|
@@ -106,7 +113,16 @@ function dashboardReducer(state, action) {
|
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
const focusedAgentId = (0, use_focus_agent_1.selectFocusedAgent)(agents, state.focusedAgentId);
|
|
109
|
-
|
|
116
|
+
const transition = { from, to: newMode, timestamp: Date.now() };
|
|
117
|
+
const modeTransitions = [...state.modeTransitions, transition];
|
|
118
|
+
return {
|
|
119
|
+
...state,
|
|
120
|
+
currentMode: newMode,
|
|
121
|
+
agents,
|
|
122
|
+
activeSkills: [],
|
|
123
|
+
focusedAgentId,
|
|
124
|
+
modeTransitions,
|
|
125
|
+
};
|
|
110
126
|
}
|
|
111
127
|
case 'AGENT_RELATIONSHIP': {
|
|
112
128
|
const edge = {
|
|
@@ -172,6 +188,14 @@ function dashboardReducer(state, action) {
|
|
|
172
188
|
else {
|
|
173
189
|
activityHistory = [...history.slice(-59), { timestamp: sec, toolCalls: 1 }];
|
|
174
190
|
}
|
|
191
|
+
const toolLower = action.payload.toolName.toLowerCase();
|
|
192
|
+
let fileChanges = state.fileChanges;
|
|
193
|
+
if (toolLower === 'write' || toolLower === 'notebookedit') {
|
|
194
|
+
fileChanges = { ...fileChanges, created: fileChanges.created + 1 };
|
|
195
|
+
}
|
|
196
|
+
else if (toolLower === 'edit') {
|
|
197
|
+
fileChanges = { ...fileChanges, modified: fileChanges.modified + 1 };
|
|
198
|
+
}
|
|
175
199
|
return {
|
|
176
200
|
...state,
|
|
177
201
|
agents,
|
|
@@ -179,6 +203,7 @@ function dashboardReducer(state, action) {
|
|
|
179
203
|
toolCalls: [...toolCallsBase, toolCall],
|
|
180
204
|
activityHistory,
|
|
181
205
|
toolInvokeCount: state.toolInvokeCount + 1,
|
|
206
|
+
fileChanges,
|
|
182
207
|
};
|
|
183
208
|
}
|
|
184
209
|
case 'OBJECTIVE_SET':
|
|
@@ -255,6 +280,28 @@ function dashboardReducer(state, action) {
|
|
|
255
280
|
const focusedAgentId = (0, use_focus_agent_1.selectFocusedAgent)(agents, state.focusedAgentId);
|
|
256
281
|
return { ...state, agents, focusedAgentId };
|
|
257
282
|
}
|
|
283
|
+
case 'TDD_PHASE_CHANGED': {
|
|
284
|
+
return { ...state, tddCurrentPhase: action.payload.phase };
|
|
285
|
+
}
|
|
286
|
+
case 'TDD_STEP_UPDATED': {
|
|
287
|
+
const { step } = action.payload;
|
|
288
|
+
const existing = state.tddSteps.findIndex(s => s.id === step.id);
|
|
289
|
+
const tddSteps = existing >= 0
|
|
290
|
+
? state.tddSteps.map((s, i) => (i === existing ? step : s))
|
|
291
|
+
: [...state.tddSteps, step];
|
|
292
|
+
return { ...state, tddSteps };
|
|
293
|
+
}
|
|
294
|
+
case 'REVIEW_RESULT_ADDED': {
|
|
295
|
+
const { result } = action.payload;
|
|
296
|
+
const idx = state.reviewResults.findIndex(r => r.agentId === result.agentId);
|
|
297
|
+
const reviewResults = idx >= 0
|
|
298
|
+
? state.reviewResults.map((r, i) => (i === idx ? result : r))
|
|
299
|
+
: [...state.reviewResults, result];
|
|
300
|
+
return { ...state, reviewResults };
|
|
301
|
+
}
|
|
302
|
+
case 'CONNECTION_STATUS_CHANGED': {
|
|
303
|
+
return { ...state, connectionStatus: action.payload.status };
|
|
304
|
+
}
|
|
258
305
|
case 'PARALLEL_COMPLETED':
|
|
259
306
|
case 'AGENTS_LOADED':
|
|
260
307
|
return state;
|
|
@@ -283,6 +330,10 @@ function useDashboardState(eventBus) {
|
|
|
283
330
|
const onSessionReset = (p) => dispatch({ type: 'SESSION_RESET', payload: p });
|
|
284
331
|
const onContextUpdated = (p) => dispatch({ type: 'CONTEXT_UPDATED', payload: p });
|
|
285
332
|
const onDiscussionRoundAdded = (p) => dispatch({ type: 'ADD_DISCUSSION_ROUND', payload: p });
|
|
333
|
+
const onTddPhaseChanged = (p) => dispatch({ type: 'TDD_PHASE_CHANGED', payload: p });
|
|
334
|
+
const onTddStepUpdated = (p) => dispatch({ type: 'TDD_STEP_UPDATED', payload: p });
|
|
335
|
+
const onReviewResultAdded = (p) => dispatch({ type: 'REVIEW_RESULT_ADDED', payload: p });
|
|
336
|
+
const onConnectionStatusChanged = (p) => dispatch({ type: 'CONNECTION_STATUS_CHANGED', payload: p });
|
|
286
337
|
eventBus.on(events_1.TUI_EVENTS.AGENT_ACTIVATED, onActivated);
|
|
287
338
|
eventBus.on(events_1.TUI_EVENTS.AGENT_DEACTIVATED, onDeactivated);
|
|
288
339
|
eventBus.on(events_1.TUI_EVENTS.MODE_CHANGED, onModeChanged);
|
|
@@ -297,6 +348,10 @@ function useDashboardState(eventBus) {
|
|
|
297
348
|
eventBus.on(events_1.TUI_EVENTS.SESSION_RESET, onSessionReset);
|
|
298
349
|
eventBus.on(events_1.TUI_EVENTS.CONTEXT_UPDATED, onContextUpdated);
|
|
299
350
|
eventBus.on(events_1.TUI_EVENTS.DISCUSSION_ROUND_ADDED, onDiscussionRoundAdded);
|
|
351
|
+
eventBus.on(events_1.TUI_EVENTS.TDD_PHASE_CHANGED, onTddPhaseChanged);
|
|
352
|
+
eventBus.on(events_1.TUI_EVENTS.TDD_STEP_UPDATED, onTddStepUpdated);
|
|
353
|
+
eventBus.on(events_1.TUI_EVENTS.REVIEW_RESULT_ADDED, onReviewResultAdded);
|
|
354
|
+
eventBus.on(events_1.TUI_EVENTS.CONNECTION_STATUS_CHANGED, onConnectionStatusChanged);
|
|
300
355
|
return () => {
|
|
301
356
|
eventBus.off(events_1.TUI_EVENTS.AGENT_ACTIVATED, onActivated);
|
|
302
357
|
eventBus.off(events_1.TUI_EVENTS.AGENT_DEACTIVATED, onDeactivated);
|
|
@@ -312,6 +367,10 @@ function useDashboardState(eventBus) {
|
|
|
312
367
|
eventBus.off(events_1.TUI_EVENTS.SESSION_RESET, onSessionReset);
|
|
313
368
|
eventBus.off(events_1.TUI_EVENTS.CONTEXT_UPDATED, onContextUpdated);
|
|
314
369
|
eventBus.off(events_1.TUI_EVENTS.DISCUSSION_ROUND_ADDED, onDiscussionRoundAdded);
|
|
370
|
+
eventBus.off(events_1.TUI_EVENTS.TDD_PHASE_CHANGED, onTddPhaseChanged);
|
|
371
|
+
eventBus.off(events_1.TUI_EVENTS.TDD_STEP_UPDATED, onTddStepUpdated);
|
|
372
|
+
eventBus.off(events_1.TUI_EVENTS.REVIEW_RESULT_ADDED, onReviewResultAdded);
|
|
373
|
+
eventBus.off(events_1.TUI_EVENTS.CONNECTION_STATUS_CHANGED, onConnectionStatusChanged);
|
|
315
374
|
};
|
|
316
375
|
}, [eventBus]);
|
|
317
376
|
(0, react_1.useEffect)(() => {
|