codingbuddy 5.0.0 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/src/config/config.schema.d.ts +6 -0
  2. package/dist/src/config/config.schema.js +3 -0
  3. package/dist/src/config/config.schema.js.map +1 -1
  4. package/dist/src/context/context-archive.service.d.ts +14 -0
  5. package/dist/src/context/context-archive.service.js +257 -0
  6. package/dist/src/context/context-archive.service.js.map +1 -0
  7. package/dist/src/context/context-archive.types.d.ts +37 -0
  8. package/dist/src/context/context-archive.types.js +47 -0
  9. package/dist/src/context/context-archive.types.js.map +1 -0
  10. package/dist/src/context/context-document.service.d.ts +3 -1
  11. package/dist/src/context/context-document.service.js +18 -2
  12. package/dist/src/context/context-document.service.js.map +1 -1
  13. package/dist/src/context/context.module.js +3 -2
  14. package/dist/src/context/context.module.js.map +1 -1
  15. package/dist/src/context/index.d.ts +1 -0
  16. package/dist/src/context/index.js +1 -0
  17. package/dist/src/context/index.js.map +1 -1
  18. package/dist/src/impact/impact-event.service.d.ts +8 -0
  19. package/dist/src/impact/impact-event.service.js +53 -0
  20. package/dist/src/impact/impact-event.service.js.map +1 -0
  21. package/dist/src/impact/impact-report.service.d.ts +7 -0
  22. package/dist/src/impact/impact-report.service.js +92 -0
  23. package/dist/src/impact/impact-report.service.js.map +1 -0
  24. package/dist/src/impact/impact.module.d.ts +2 -0
  25. package/dist/src/impact/impact.module.js +22 -0
  26. package/dist/src/impact/impact.module.js.map +1 -0
  27. package/dist/src/impact/impact.types.d.ts +32 -0
  28. package/dist/src/impact/impact.types.js +5 -0
  29. package/dist/src/impact/impact.types.js.map +1 -0
  30. package/dist/src/impact/index.d.ts +4 -0
  31. package/dist/src/impact/index.js +25 -0
  32. package/dist/src/impact/index.js.map +1 -0
  33. package/dist/src/keyword/diff-analyzer.d.ts +19 -0
  34. package/dist/src/keyword/diff-analyzer.js +127 -0
  35. package/dist/src/keyword/diff-analyzer.js.map +1 -0
  36. package/dist/src/keyword/keyword.service.d.ts +1 -0
  37. package/dist/src/keyword/keyword.service.js +25 -3
  38. package/dist/src/keyword/keyword.service.js.map +1 -1
  39. package/dist/src/keyword/keyword.types.d.ts +25 -0
  40. package/dist/src/keyword/keyword.types.js +27 -0
  41. package/dist/src/keyword/keyword.types.js.map +1 -1
  42. package/dist/src/keyword/primary-agent-resolver.d.ts +2 -1
  43. package/dist/src/keyword/primary-agent-resolver.js +2 -1
  44. package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
  45. package/dist/src/keyword/strategies/act-agent.strategy.js +8 -0
  46. package/dist/src/keyword/strategies/act-agent.strategy.js.map +1 -1
  47. package/dist/src/keyword/strategies/resolution-strategy.interface.d.ts +2 -0
  48. package/dist/src/keyword/visual-data.builder.d.ts +10 -0
  49. package/dist/src/keyword/visual-data.builder.js +62 -0
  50. package/dist/src/keyword/visual-data.builder.js.map +1 -0
  51. package/dist/src/mcp/handlers/agent.handler.d.ts +3 -1
  52. package/dist/src/mcp/handlers/agent.handler.js +13 -2
  53. package/dist/src/mcp/handlers/agent.handler.js.map +1 -1
  54. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
  55. package/dist/src/mcp/handlers/checklist-context.handler.js +13 -2
  56. package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -1
  57. package/dist/src/mcp/handlers/context-archive.handler.d.ts +14 -0
  58. package/dist/src/mcp/handlers/context-archive.handler.js +136 -0
  59. package/dist/src/mcp/handlers/context-archive.handler.js.map +1 -0
  60. package/dist/src/mcp/handlers/context-document.handler.d.ts +3 -1
  61. package/dist/src/mcp/handlers/context-document.handler.js +22 -2
  62. package/dist/src/mcp/handlers/context-document.handler.js.map +1 -1
  63. package/dist/src/mcp/handlers/impact.handler.d.ts +11 -0
  64. package/dist/src/mcp/handlers/impact.handler.js +53 -0
  65. package/dist/src/mcp/handlers/impact.handler.js.map +1 -0
  66. package/dist/src/mcp/handlers/index.d.ts +3 -0
  67. package/dist/src/mcp/handlers/index.js +7 -1
  68. package/dist/src/mcp/handlers/index.js.map +1 -1
  69. package/dist/src/mcp/handlers/mode.handler.d.ts +4 -1
  70. package/dist/src/mcp/handlers/mode.handler.js +51 -3
  71. package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
  72. package/dist/src/mcp/handlers/rule-insights.handler.d.ts +14 -0
  73. package/dist/src/mcp/handlers/rule-insights.handler.js +78 -0
  74. package/dist/src/mcp/handlers/rule-insights.handler.js.map +1 -0
  75. package/dist/src/mcp/handlers/rules.handler.d.ts +3 -1
  76. package/dist/src/mcp/handlers/rules.handler.js +14 -2
  77. package/dist/src/mcp/handlers/rules.handler.js.map +1 -1
  78. package/dist/src/mcp/mcp.module.js +5 -0
  79. package/dist/src/mcp/mcp.module.js.map +1 -1
  80. package/dist/src/rules/rule-insights.service.d.ts +31 -0
  81. package/dist/src/rules/rule-insights.service.js +102 -0
  82. package/dist/src/rules/rule-insights.service.js.map +1 -0
  83. package/dist/src/rules/rules.module.js +3 -2
  84. package/dist/src/rules/rules.module.js.map +1 -1
  85. package/dist/src/shared/version.d.ts +1 -1
  86. package/dist/src/shared/version.js +1 -1
  87. package/dist/src/skill/i18n/keywords.types.d.ts +4 -2
  88. package/dist/src/skill/i18n/keywords.types.js +3 -0
  89. package/dist/src/skill/i18n/keywords.types.js.map +1 -1
  90. package/dist/src/tui/components/ActModeScreen.d.ts +10 -0
  91. package/dist/src/tui/components/ActModeScreen.js +25 -0
  92. package/dist/src/tui/components/ActModeScreen.js.map +1 -0
  93. package/dist/src/tui/components/AgentDiscussionPanel.js +105 -11
  94. package/dist/src/tui/components/AgentDiscussionPanel.js.map +1 -1
  95. package/dist/src/tui/components/AgentDiscussionPanel.spec.js +154 -10
  96. package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +1 -1
  97. package/dist/src/tui/components/EvalModeScreen.d.ts +8 -0
  98. package/dist/src/tui/components/EvalModeScreen.js +21 -0
  99. package/dist/src/tui/components/EvalModeScreen.js.map +1 -0
  100. package/dist/src/tui/components/FlowMap.spec.js.map +1 -1
  101. package/dist/src/tui/components/FocusedAgentPanel.js +1 -1
  102. package/dist/src/tui/components/FocusedAgentPanel.js.map +1 -1
  103. package/dist/src/tui/components/FocusedAgentPanel.spec.js +1 -3
  104. package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +1 -1
  105. package/dist/src/tui/components/HeaderBar.js +3 -3
  106. package/dist/src/tui/components/HeaderBar.js.map +1 -1
  107. package/dist/src/tui/components/ModeScreenRouter.d.ts +13 -0
  108. package/dist/src/tui/components/ModeScreenRouter.js +51 -0
  109. package/dist/src/tui/components/ModeScreenRouter.js.map +1 -0
  110. package/dist/src/tui/components/PlanModeScreen.d.ts +10 -0
  111. package/dist/src/tui/components/PlanModeScreen.js +24 -0
  112. package/dist/src/tui/components/PlanModeScreen.js.map +1 -0
  113. package/dist/src/tui/components/SessionDashboard.d.ts +17 -0
  114. package/dist/src/tui/components/SessionDashboard.js +58 -0
  115. package/dist/src/tui/components/SessionDashboard.js.map +1 -0
  116. package/dist/src/tui/components/act-screen.pure.d.ts +12 -0
  117. package/dist/src/tui/components/act-screen.pure.js +93 -0
  118. package/dist/src/tui/components/act-screen.pure.js.map +1 -0
  119. package/dist/src/tui/components/agent-discussion-panel.pure.d.ts +45 -0
  120. package/dist/src/tui/components/agent-discussion-panel.pure.js +130 -23
  121. package/dist/src/tui/components/agent-discussion-panel.pure.js.map +1 -1
  122. package/dist/src/tui/components/eval-screen.pure.d.ts +13 -0
  123. package/dist/src/tui/components/eval-screen.pure.js +76 -0
  124. package/dist/src/tui/components/eval-screen.pure.js.map +1 -0
  125. package/dist/src/tui/components/index.d.ts +14 -0
  126. package/dist/src/tui/components/index.js +40 -1
  127. package/dist/src/tui/components/index.js.map +1 -1
  128. package/dist/src/tui/components/plan-screen.pure.d.ts +9 -0
  129. package/dist/src/tui/components/plan-screen.pure.js +61 -0
  130. package/dist/src/tui/components/plan-screen.pure.js.map +1 -0
  131. package/dist/src/tui/components/session-dashboard.pure.d.ts +43 -0
  132. package/dist/src/tui/components/session-dashboard.pure.js +182 -0
  133. package/dist/src/tui/components/session-dashboard.pure.js.map +1 -0
  134. package/dist/src/tui/dashboard-app.js +3 -4
  135. package/dist/src/tui/dashboard-app.js.map +1 -1
  136. package/dist/src/tui/dashboard-types.d.ts +47 -0
  137. package/dist/src/tui/dashboard-types.js +20 -1
  138. package/dist/src/tui/dashboard-types.js.map +1 -1
  139. package/dist/src/tui/events/index.d.ts +1 -1
  140. package/dist/src/tui/events/index.js.map +1 -1
  141. package/dist/src/tui/events/types.d.ts +23 -1
  142. package/dist/src/tui/events/types.js +4 -0
  143. package/dist/src/tui/events/types.js.map +1 -1
  144. package/dist/src/tui/hooks/use-dashboard-state.d.ts +13 -1
  145. package/dist/src/tui/hooks/use-dashboard-state.js +60 -1
  146. package/dist/src/tui/hooks/use-dashboard-state.js.map +1 -1
  147. package/dist/src/tui-bundle.mjs +965 -278
  148. package/dist/tsconfig.build.tsbuildinfo +1 -1
  149. 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 FlowMap_1 = require("./components/FlowMap");
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
- state.discussionRounds.length > 0 ? (react_1.default.createElement(AgentDiscussionPanel_1.AgentDiscussionPanel, { rounds: state.discussionRounds, width: grid.flowMap.width, height: grid.flowMap.height })) : (react_1.default.createElement(FlowMap_1.FlowMap, { agents: state.agents, edges: state.edges, layoutMode: layoutMode, width: grid.flowMap.width, height: grid.flowMap.height, activeStage: state.currentMode, tick: tick, now: now })))) : (react_1.default.createElement(ink_1.Box, { flexDirection: "row", width: grid.total.width, height: grid.checklistPanel.height + grid.focusedAgent.height },
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
- state.discussionRounds.length > 0 ? (react_1.default.createElement(AgentDiscussionPanel_1.AgentDiscussionPanel, { rounds: state.discussionRounds, width: grid.flowMap.width, height: grid.flowMap.height })) : (react_1.default.createElement(FlowMap_1.FlowMap, { agents: state.agents, edges: state.edges, layoutMode: layoutMode, width: grid.flowMap.width, height: grid.flowMap.height, activeStage: state.currentMode, tick: tick, now: now })),
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":"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"}
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;AA1GD,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"}
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,iCAkBiB;AAjBf,mGAAA,UAAU,OAAA;AAkBZ,+DAKgC;AAF9B,0HAAA,kBAAkB,OAAA;AAClB,mHAAA,WAAW,OAAA"}
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":";;;AAea,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;CACxC,CAAC,CAAC"}
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
- return { ...state, currentMode: newMode, agents, activeSkills: [], focusedAgentId };
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)(() => {