codingbuddy 4.5.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.
Files changed (236) hide show
  1. package/dist/src/agent/agent.module.js +3 -1
  2. package/dist/src/agent/agent.module.js.map +1 -1
  3. package/dist/src/agent/agent.service.d.ts +11 -4
  4. package/dist/src/agent/agent.service.js +81 -13
  5. package/dist/src/agent/agent.service.js.map +1 -1
  6. package/dist/src/agent/agent.types.d.ts +41 -1
  7. package/dist/src/agent/agent.types.js.map +1 -1
  8. package/dist/src/collaboration/discussion-engine.d.ts +14 -0
  9. package/dist/src/collaboration/discussion-engine.js +49 -0
  10. package/dist/src/collaboration/discussion-engine.js.map +1 -0
  11. package/dist/src/collaboration/index.d.ts +5 -0
  12. package/dist/src/collaboration/index.js +22 -0
  13. package/dist/src/collaboration/index.js.map +1 -0
  14. package/dist/src/collaboration/opinion-adapter.d.ts +14 -0
  15. package/dist/src/collaboration/opinion-adapter.js +56 -0
  16. package/dist/src/collaboration/opinion-adapter.js.map +1 -0
  17. package/dist/src/collaboration/terminal-formatter.d.ts +5 -0
  18. package/dist/src/collaboration/terminal-formatter.js +57 -0
  19. package/dist/src/collaboration/terminal-formatter.js.map +1 -0
  20. package/dist/src/collaboration/types.d.ts +50 -0
  21. package/dist/src/collaboration/types.js +53 -0
  22. package/dist/src/collaboration/types.js.map +1 -0
  23. package/dist/src/config/config.schema.d.ts +14 -0
  24. package/dist/src/config/config.schema.js +7 -0
  25. package/dist/src/config/config.schema.js.map +1 -1
  26. package/dist/src/context/context-archive.service.d.ts +14 -0
  27. package/dist/src/context/context-archive.service.js +257 -0
  28. package/dist/src/context/context-archive.service.js.map +1 -0
  29. package/dist/src/context/context-archive.types.d.ts +37 -0
  30. package/dist/src/context/context-archive.types.js +47 -0
  31. package/dist/src/context/context-archive.types.js.map +1 -0
  32. package/dist/src/context/context-document.service.d.ts +4 -2
  33. package/dist/src/context/context-document.service.js +24 -4
  34. package/dist/src/context/context-document.service.js.map +1 -1
  35. package/dist/src/context/context-document.types.d.ts +18 -0
  36. package/dist/src/context/context-document.types.js +13 -1
  37. package/dist/src/context/context-document.types.js.map +1 -1
  38. package/dist/src/context/context-parser.utils.js +32 -0
  39. package/dist/src/context/context-parser.utils.js.map +1 -1
  40. package/dist/src/context/context-serializer.utils.d.ts +3 -2
  41. package/dist/src/context/context-serializer.utils.js +25 -1
  42. package/dist/src/context/context-serializer.utils.js.map +1 -1
  43. package/dist/src/context/context.module.js +3 -2
  44. package/dist/src/context/context.module.js.map +1 -1
  45. package/dist/src/context/index.d.ts +1 -0
  46. package/dist/src/context/index.js +1 -0
  47. package/dist/src/context/index.js.map +1 -1
  48. package/dist/src/impact/impact-event.service.d.ts +8 -0
  49. package/dist/src/impact/impact-event.service.js +53 -0
  50. package/dist/src/impact/impact-event.service.js.map +1 -0
  51. package/dist/src/impact/impact-report.service.d.ts +7 -0
  52. package/dist/src/impact/impact-report.service.js +92 -0
  53. package/dist/src/impact/impact-report.service.js.map +1 -0
  54. package/dist/src/impact/impact.module.d.ts +2 -0
  55. package/dist/src/impact/impact.module.js +22 -0
  56. package/dist/src/impact/impact.module.js.map +1 -0
  57. package/dist/src/impact/impact.types.d.ts +32 -0
  58. package/dist/src/impact/impact.types.js +5 -0
  59. package/dist/src/impact/impact.types.js.map +1 -0
  60. package/dist/src/impact/index.d.ts +4 -0
  61. package/dist/src/impact/index.js +25 -0
  62. package/dist/src/impact/index.js.map +1 -0
  63. package/dist/src/keyword/diff-analyzer.d.ts +19 -0
  64. package/dist/src/keyword/diff-analyzer.js +127 -0
  65. package/dist/src/keyword/diff-analyzer.js.map +1 -0
  66. package/dist/src/keyword/explicit-pattern-matcher.d.ts +3 -0
  67. package/dist/src/keyword/explicit-pattern-matcher.js +34 -0
  68. package/dist/src/keyword/explicit-pattern-matcher.js.map +1 -0
  69. package/dist/src/keyword/keyword.module.js +17 -1
  70. package/dist/src/keyword/keyword.module.js.map +1 -1
  71. package/dist/src/keyword/keyword.service.d.ts +3 -0
  72. package/dist/src/keyword/keyword.service.js +33 -3
  73. package/dist/src/keyword/keyword.service.js.map +1 -1
  74. package/dist/src/keyword/keyword.types.d.ts +29 -1
  75. package/dist/src/keyword/keyword.types.js +34 -1
  76. package/dist/src/keyword/keyword.types.js.map +1 -1
  77. package/dist/src/keyword/primary-agent-resolver.d.ts +7 -3
  78. package/dist/src/keyword/primary-agent-resolver.js +24 -2
  79. package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
  80. package/dist/src/keyword/strategies/act-agent.strategy.js +16 -0
  81. package/dist/src/keyword/strategies/act-agent.strategy.js.map +1 -1
  82. package/dist/src/keyword/strategies/index.d.ts +1 -1
  83. package/dist/src/keyword/strategies/index.js.map +1 -1
  84. package/dist/src/keyword/strategies/resolution-strategy.interface.d.ts +5 -0
  85. package/dist/src/keyword/visual-data.builder.d.ts +10 -0
  86. package/dist/src/keyword/visual-data.builder.js +62 -0
  87. package/dist/src/keyword/visual-data.builder.js.map +1 -0
  88. package/dist/src/mcp/handlers/agent.handler.d.ts +4 -1
  89. package/dist/src/mcp/handlers/agent.handler.js +59 -6
  90. package/dist/src/mcp/handlers/agent.handler.js.map +1 -1
  91. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
  92. package/dist/src/mcp/handlers/checklist-context.handler.js +13 -2
  93. package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -1
  94. package/dist/src/mcp/handlers/context-archive.handler.d.ts +14 -0
  95. package/dist/src/mcp/handlers/context-archive.handler.js +136 -0
  96. package/dist/src/mcp/handlers/context-archive.handler.js.map +1 -0
  97. package/dist/src/mcp/handlers/context-document.handler.d.ts +6 -1
  98. package/dist/src/mcp/handlers/context-document.handler.js +113 -12
  99. package/dist/src/mcp/handlers/context-document.handler.js.map +1 -1
  100. package/dist/src/mcp/handlers/discussion.handler.d.ts +14 -0
  101. package/dist/src/mcp/handlers/discussion.handler.js +168 -0
  102. package/dist/src/mcp/handlers/discussion.handler.js.map +1 -0
  103. package/dist/src/mcp/handlers/discussion.types.d.ts +18 -0
  104. package/dist/src/mcp/handlers/discussion.types.js +11 -0
  105. package/dist/src/mcp/handlers/discussion.types.js.map +1 -0
  106. package/dist/src/mcp/handlers/impact.handler.d.ts +11 -0
  107. package/dist/src/mcp/handlers/impact.handler.js +53 -0
  108. package/dist/src/mcp/handlers/impact.handler.js.map +1 -0
  109. package/dist/src/mcp/handlers/index.d.ts +6 -0
  110. package/dist/src/mcp/handlers/index.js +13 -1
  111. package/dist/src/mcp/handlers/index.js.map +1 -1
  112. package/dist/src/mcp/handlers/mode.handler.d.ts +7 -1
  113. package/dist/src/mcp/handlers/mode.handler.js +109 -3
  114. package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
  115. package/dist/src/mcp/handlers/pipeline.handler.d.ts +14 -0
  116. package/dist/src/mcp/handlers/pipeline.handler.js +137 -0
  117. package/dist/src/mcp/handlers/pipeline.handler.js.map +1 -0
  118. package/dist/src/mcp/handlers/rule-insights.handler.d.ts +14 -0
  119. package/dist/src/mcp/handlers/rule-insights.handler.js +78 -0
  120. package/dist/src/mcp/handlers/rule-insights.handler.js.map +1 -0
  121. package/dist/src/mcp/handlers/rules.handler.d.ts +3 -1
  122. package/dist/src/mcp/handlers/rules.handler.js +14 -2
  123. package/dist/src/mcp/handlers/rules.handler.js.map +1 -1
  124. package/dist/src/mcp/mcp.module.js +10 -0
  125. package/dist/src/mcp/mcp.module.js.map +1 -1
  126. package/dist/src/parallel-validation/extract-file-paths.d.ts +1 -0
  127. package/dist/src/parallel-validation/extract-file-paths.js +19 -0
  128. package/dist/src/parallel-validation/extract-file-paths.js.map +1 -0
  129. package/dist/src/parallel-validation/index.d.ts +5 -0
  130. package/dist/src/parallel-validation/index.js +12 -0
  131. package/dist/src/parallel-validation/index.js.map +1 -0
  132. package/dist/src/parallel-validation/overlap-matrix.d.ts +10 -0
  133. package/dist/src/parallel-validation/overlap-matrix.js +23 -0
  134. package/dist/src/parallel-validation/overlap-matrix.js.map +1 -0
  135. package/dist/src/parallel-validation/parallel-validation.handler.d.ts +8 -0
  136. package/dist/src/parallel-validation/parallel-validation.handler.js +84 -0
  137. package/dist/src/parallel-validation/parallel-validation.handler.js.map +1 -0
  138. package/dist/src/parallel-validation/parallel-validation.types.d.ts +12 -0
  139. package/dist/src/parallel-validation/parallel-validation.types.js +3 -0
  140. package/dist/src/parallel-validation/parallel-validation.types.js.map +1 -0
  141. package/dist/src/parallel-validation/wave-splitter.d.ts +2 -0
  142. package/dist/src/parallel-validation/wave-splitter.js +39 -0
  143. package/dist/src/parallel-validation/wave-splitter.js.map +1 -0
  144. package/dist/src/pipeline/index.d.ts +5 -0
  145. package/dist/src/pipeline/index.js +14 -0
  146. package/dist/src/pipeline/index.js.map +1 -0
  147. package/dist/src/pipeline/pipeline.executors.d.ts +2 -0
  148. package/dist/src/pipeline/pipeline.executors.js +79 -0
  149. package/dist/src/pipeline/pipeline.executors.js.map +1 -0
  150. package/dist/src/pipeline/pipeline.module.d.ts +2 -0
  151. package/dist/src/pipeline/pipeline.module.js +21 -0
  152. package/dist/src/pipeline/pipeline.module.js.map +1 -0
  153. package/dist/src/pipeline/pipeline.service.d.ts +8 -0
  154. package/dist/src/pipeline/pipeline.service.js +89 -0
  155. package/dist/src/pipeline/pipeline.service.js.map +1 -0
  156. package/dist/src/pipeline/pipeline.types.d.ts +47 -0
  157. package/dist/src/pipeline/pipeline.types.js +33 -0
  158. package/dist/src/pipeline/pipeline.types.js.map +1 -0
  159. package/dist/src/rules/rule-insights.service.d.ts +31 -0
  160. package/dist/src/rules/rule-insights.service.js +102 -0
  161. package/dist/src/rules/rule-insights.service.js.map +1 -0
  162. package/dist/src/rules/rule-tracker.d.ts +24 -0
  163. package/dist/src/rules/rule-tracker.js +74 -0
  164. package/dist/src/rules/rule-tracker.js.map +1 -0
  165. package/dist/src/rules/rules.module.js +3 -2
  166. package/dist/src/rules/rules.module.js.map +1 -1
  167. package/dist/src/shared/event-bridge-reader.d.ts +17 -0
  168. package/dist/src/shared/event-bridge-reader.js +56 -0
  169. package/dist/src/shared/event-bridge-reader.js.map +1 -0
  170. package/dist/src/shared/version.d.ts +1 -1
  171. package/dist/src/shared/version.js +1 -1
  172. package/dist/src/skill/i18n/keywords.types.d.ts +4 -2
  173. package/dist/src/skill/i18n/keywords.types.js +3 -0
  174. package/dist/src/skill/i18n/keywords.types.js.map +1 -1
  175. package/dist/src/tui/components/ActModeScreen.d.ts +10 -0
  176. package/dist/src/tui/components/ActModeScreen.js +25 -0
  177. package/dist/src/tui/components/ActModeScreen.js.map +1 -0
  178. package/dist/src/tui/components/AgentDiscussionPanel.d.ts +8 -0
  179. package/dist/src/tui/components/AgentDiscussionPanel.js +115 -0
  180. package/dist/src/tui/components/AgentDiscussionPanel.js.map +1 -0
  181. package/dist/src/tui/components/AgentDiscussionPanel.spec.d.ts +1 -0
  182. package/dist/src/tui/components/AgentDiscussionPanel.spec.js +229 -0
  183. package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +1 -0
  184. package/dist/src/tui/components/EvalModeScreen.d.ts +8 -0
  185. package/dist/src/tui/components/EvalModeScreen.js +21 -0
  186. package/dist/src/tui/components/EvalModeScreen.js.map +1 -0
  187. package/dist/src/tui/components/FlowMap.spec.js.map +1 -1
  188. package/dist/src/tui/components/FocusedAgentPanel.js +1 -1
  189. package/dist/src/tui/components/FocusedAgentPanel.js.map +1 -1
  190. package/dist/src/tui/components/FocusedAgentPanel.spec.js +1 -3
  191. package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +1 -1
  192. package/dist/src/tui/components/HeaderBar.js +3 -3
  193. package/dist/src/tui/components/HeaderBar.js.map +1 -1
  194. package/dist/src/tui/components/ModeScreenRouter.d.ts +13 -0
  195. package/dist/src/tui/components/ModeScreenRouter.js +51 -0
  196. package/dist/src/tui/components/ModeScreenRouter.js.map +1 -0
  197. package/dist/src/tui/components/PlanModeScreen.d.ts +10 -0
  198. package/dist/src/tui/components/PlanModeScreen.js +24 -0
  199. package/dist/src/tui/components/PlanModeScreen.js.map +1 -0
  200. package/dist/src/tui/components/SessionDashboard.d.ts +17 -0
  201. package/dist/src/tui/components/SessionDashboard.js +58 -0
  202. package/dist/src/tui/components/SessionDashboard.js.map +1 -0
  203. package/dist/src/tui/components/act-screen.pure.d.ts +12 -0
  204. package/dist/src/tui/components/act-screen.pure.js +93 -0
  205. package/dist/src/tui/components/act-screen.pure.js.map +1 -0
  206. package/dist/src/tui/components/agent-discussion-panel.pure.d.ts +55 -0
  207. package/dist/src/tui/components/agent-discussion-panel.pure.js +201 -0
  208. package/dist/src/tui/components/agent-discussion-panel.pure.js.map +1 -0
  209. package/dist/src/tui/components/eval-screen.pure.d.ts +13 -0
  210. package/dist/src/tui/components/eval-screen.pure.js +76 -0
  211. package/dist/src/tui/components/eval-screen.pure.js.map +1 -0
  212. package/dist/src/tui/components/index.d.ts +16 -0
  213. package/dist/src/tui/components/index.js +48 -1
  214. package/dist/src/tui/components/index.js.map +1 -1
  215. package/dist/src/tui/components/plan-screen.pure.d.ts +9 -0
  216. package/dist/src/tui/components/plan-screen.pure.js +61 -0
  217. package/dist/src/tui/components/plan-screen.pure.js.map +1 -0
  218. package/dist/src/tui/components/session-dashboard.pure.d.ts +43 -0
  219. package/dist/src/tui/components/session-dashboard.pure.js +182 -0
  220. package/dist/src/tui/components/session-dashboard.pure.js.map +1 -0
  221. package/dist/src/tui/dashboard-app.js +3 -3
  222. package/dist/src/tui/dashboard-app.js.map +1 -1
  223. package/dist/src/tui/dashboard-types.d.ts +49 -0
  224. package/dist/src/tui/dashboard-types.js +20 -1
  225. package/dist/src/tui/dashboard-types.js.map +1 -1
  226. package/dist/src/tui/events/index.d.ts +1 -1
  227. package/dist/src/tui/events/index.js.map +1 -1
  228. package/dist/src/tui/events/types.d.ts +29 -1
  229. package/dist/src/tui/events/types.js +5 -0
  230. package/dist/src/tui/events/types.js.map +1 -1
  231. package/dist/src/tui/hooks/use-dashboard-state.d.ts +16 -1
  232. package/dist/src/tui/hooks/use-dashboard-state.js +70 -1
  233. package/dist/src/tui/hooks/use-dashboard-state.js.map +1 -1
  234. package/dist/src/tui-bundle.mjs +1023 -125
  235. package/dist/tsconfig.build.tsbuildinfo +1 -1
  236. package/package.json +14 -14
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveModeScreen = resolveModeScreen;
4
+ exports.ModeScreenRouter = ModeScreenRouter;
5
+ const react_1 = require("react");
6
+ const ink_1 = require("ink");
7
+ const PlanModeScreen_1 = require("./PlanModeScreen");
8
+ const ActModeScreen_1 = require("./ActModeScreen");
9
+ const EvalModeScreen_1 = require("./EvalModeScreen");
10
+ const FlowMap_1 = require("./FlowMap");
11
+ function resolveModeScreen(mode, hasDiscussionRounds, hasTddSteps, hasReviewResults) {
12
+ if (mode === null)
13
+ return 'flow';
14
+ if (mode === 'AUTO') {
15
+ if (hasReviewResults)
16
+ return 'eval';
17
+ if (hasTddSteps)
18
+ return 'act';
19
+ if (hasDiscussionRounds)
20
+ return 'plan';
21
+ return 'plan';
22
+ }
23
+ switch (mode) {
24
+ case 'PLAN':
25
+ return 'plan';
26
+ case 'ACT':
27
+ return 'act';
28
+ case 'EVAL':
29
+ return 'eval';
30
+ }
31
+ }
32
+ function DisconnectBanner({ status, width, }) {
33
+ if (status === 'connected')
34
+ return null;
35
+ const icon = status === 'reconnecting' ? '🔄' : '⚠️';
36
+ const msg = status === 'reconnecting' ? 'Reconnecting...' : 'Disconnected';
37
+ return (react_1.default.createElement(ink_1.Box, { width: width, height: 1 },
38
+ react_1.default.createElement(ink_1.Text, { color: "yellow", bold: true }, `${icon} Event Bridge: ${msg}`)));
39
+ }
40
+ function ModeScreenRouter({ state, layoutMode, width, height, tick, now, }) {
41
+ const bannerHeight = state.connectionStatus !== 'connected' ? 1 : 0;
42
+ const contentHeight = height - bannerHeight;
43
+ const screen = resolveModeScreen(state.currentMode, state.discussionRounds.length > 0, state.tddSteps.length > 0, state.reviewResults.length > 0);
44
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: width, height: height },
45
+ react_1.default.createElement(DisconnectBanner, { status: state.connectionStatus, width: width }),
46
+ screen === 'plan' && (react_1.default.createElement(PlanModeScreen_1.PlanModeScreen, { agents: state.agents, rounds: state.discussionRounds, width: width, height: contentHeight })),
47
+ screen === 'act' && (react_1.default.createElement(ActModeScreen_1.ActModeScreen, { currentPhase: state.tddCurrentPhase, steps: state.tddSteps, agents: state.agents, width: width, height: contentHeight })),
48
+ screen === 'eval' && (react_1.default.createElement(EvalModeScreen_1.EvalModeScreen, { results: state.reviewResults, width: width, height: contentHeight })),
49
+ screen === 'flow' && (react_1.default.createElement(FlowMap_1.FlowMap, { agents: state.agents, edges: state.edges, layoutMode: layoutMode, width: width, height: contentHeight, activeStage: state.currentMode, tick: tick, now: now }))));
50
+ }
51
+ //# sourceMappingURL=ModeScreenRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModeScreenRouter.js","sourceRoot":"","sources":["../../../../src/tui/components/ModeScreenRouter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { DashboardNode } from '../dashboard-types';
3
+ import type { DiscussionRound } from '../../collaboration/types';
4
+ export interface PlanModeScreenProps {
5
+ agents: ReadonlyMap<string, DashboardNode>;
6
+ rounds: readonly DiscussionRound[];
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export declare function PlanModeScreen({ agents, rounds, width, height, }: PlanModeScreenProps): React.ReactElement;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlanModeScreen = PlanModeScreen;
4
+ const react_1 = require("react");
5
+ const ink_1 = require("ink");
6
+ const theme_1 = require("../utils/theme");
7
+ const plan_screen_pure_1 = require("./plan-screen.pure");
8
+ const AgentDiscussionPanel_1 = require("./AgentDiscussionPanel");
9
+ const LINE_COLORS = {
10
+ header: 'magenta',
11
+ agent: 'white',
12
+ discussion: 'cyan',
13
+ consensus: 'green',
14
+ empty: 'gray',
15
+ };
16
+ function PlanModeScreen({ agents, rounds, width, height, }) {
17
+ const summaryLines = (0, react_1.useMemo)(() => (0, plan_screen_pure_1.renderPlanScreen)(agents, rounds, width - 2), [agents, rounds, width]);
18
+ const summaryHeight = Math.max(5, Math.floor(height * 0.4));
19
+ const discussionHeight = height - summaryHeight;
20
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: width, height: height },
21
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: width, height: summaryHeight, borderStyle: "round", borderColor: theme_1.BORDER_COLORS.panel }, summaryLines.slice(0, summaryHeight - 2).map((line, i) => (react_1.default.createElement(ink_1.Text, { key: i, color: LINE_COLORS[line.type], bold: line.type === 'header' || line.type === 'consensus', dimColor: line.type === 'empty', wrap: "truncate" }, line.text)))),
22
+ rounds.length > 0 && discussionHeight > 3 && (react_1.default.createElement(AgentDiscussionPanel_1.AgentDiscussionPanel, { rounds: rounds, width: width, height: discussionHeight }))));
23
+ }
24
+ //# sourceMappingURL=PlanModeScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanModeScreen.js","sourceRoot":"","sources":["../../../../src/tui/components/PlanModeScreen.tsx"],"names":[],"mappings":";;AA4BA,wCAyCC;AAhED,iCAAuC;AACvC,6BAAgC;AAGhC,0CAA+C;AAC/C,yDAA2E;AAC3E,iEAA8D;AAS9D,MAAM,WAAW,GAA2C;IAC1D,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,MAAM;IAClB,SAAS,EAAE,OAAO;IAClB,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,SAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,GACc;IACpB,MAAM,YAAY,GAAG,IAAA,eAAO,EAC1B,GAAG,EAAE,CAAC,IAAA,mCAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,EACjD,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CACxB,CAAC;IAGF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,CAAC;IAEhD,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QACtD,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,qBAAa,CAAC,KAAK,IAE/B,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACzD,8BAAC,UAAI,IACH,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EACzD,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,EAC/B,IAAI,EAAC,UAAU,IAEd,IAAI,CAAC,IAAI,CACL,CACR,CAAC,CACE;QACL,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC,IAAI,CAC5C,8BAAC,2CAAoB,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAI,CACjF,CACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { ToolCallRecord, TddStep, DashboardNode, ModeTransition, FileChangeStats } from '../dashboard-types';
3
+ import type { LayoutMode } from '../dashboard-types';
4
+ export interface SessionDashboardProps {
5
+ toolCalls: ToolCallRecord[];
6
+ agents: Map<string, DashboardNode>;
7
+ tddSteps: TddStep[];
8
+ modeTransitions: ModeTransition[];
9
+ fileChanges: FileChangeStats;
10
+ sessionStartedAt: number;
11
+ totalToolCalls: number;
12
+ totalAgents: number;
13
+ width: number;
14
+ layoutMode: LayoutMode;
15
+ now?: number;
16
+ }
17
+ export declare function SessionDashboard({ toolCalls, agents, tddSteps, modeTransitions, fileChanges, sessionStartedAt, totalToolCalls, totalAgents, width, layoutMode, now: nowProp, }: SessionDashboardProps): React.ReactElement;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionDashboard = SessionDashboard;
4
+ const react_1 = require("react");
5
+ const ink_1 = require("ink");
6
+ const theme_1 = require("../utils/theme");
7
+ const session_dashboard_pure_1 = require("./session-dashboard.pure");
8
+ function SessionDashboard({ toolCalls, agents, tddSteps, modeTransitions, fileChanges, sessionStartedAt, totalToolCalls, totalAgents, width, layoutMode, now: nowProp, }) {
9
+ const now = nowProp ?? Date.now();
10
+ const lines = (0, react_1.useMemo)(() => {
11
+ const toolDistribution = (0, session_dashboard_pure_1.computeToolDistribution)(toolCalls);
12
+ const agentTimeline = (0, session_dashboard_pure_1.computeAgentTimeline)(agents, now);
13
+ const tddStats = (0, session_dashboard_pure_1.computeTddCycleStats)(tddSteps);
14
+ const sessionDuration = (0, session_dashboard_pure_1.formatDurationMs)(now - sessionStartedAt);
15
+ const innerWidth = Math.max(20, width - 4);
16
+ return (0, session_dashboard_pure_1.renderSessionDashboard)({
17
+ toolDistribution,
18
+ agentTimeline,
19
+ tddStats,
20
+ fileChanges,
21
+ modeTransitions,
22
+ sessionStartedAt,
23
+ sessionDuration,
24
+ totalToolCalls,
25
+ totalAgents,
26
+ width: innerWidth,
27
+ layoutMode,
28
+ });
29
+ }, [
30
+ toolCalls,
31
+ agents,
32
+ tddSteps,
33
+ modeTransitions,
34
+ fileChanges,
35
+ sessionStartedAt,
36
+ totalToolCalls,
37
+ totalAgents,
38
+ width,
39
+ layoutMode,
40
+ now,
41
+ ]);
42
+ return (react_1.default.createElement(ink_1.Box, { borderStyle: "single", borderColor: theme_1.BORDER_COLORS.panel, width: width, flexDirection: "column", paddingLeft: 1, paddingRight: 1 }, lines.map((line, i) => {
43
+ if (line.startsWith('──')) {
44
+ return (react_1.default.createElement(ink_1.Text, { key: i, color: "magenta" }, line));
45
+ }
46
+ if (line.includes('●')) {
47
+ return (react_1.default.createElement(ink_1.Text, { key: i, color: "green" }, line));
48
+ }
49
+ if (line.includes('!')) {
50
+ return (react_1.default.createElement(ink_1.Text, { key: i, color: "red" }, line));
51
+ }
52
+ if (line.includes('(no ')) {
53
+ return (react_1.default.createElement(ink_1.Text, { key: i, dimColor: true }, line));
54
+ }
55
+ return react_1.default.createElement(ink_1.Text, { key: i }, line);
56
+ })));
57
+ }
58
+ //# sourceMappingURL=SessionDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionDashboard.js","sourceRoot":"","sources":["../../../../src/tui/components/SessionDashboard.tsx"],"names":[],"mappings":";;AAiCA,4CA8FC;AA/HD,iCAAuC;AACvC,6BAAgC;AAShC,0CAA+C;AAC/C,qEAMkC;AAgBlC,SAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,MAAM,EACN,QAAQ,EACR,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,KAAK,EACL,UAAU,EACV,GAAG,EAAE,OAAO,GACU;IACtB,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAElC,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACzB,MAAM,gBAAgB,GAAG,IAAA,gDAAuB,EAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAA,6CAAoB,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAA,6CAAoB,EAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAA,yCAAgB,EAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAE3C,OAAO,IAAA,+CAAsB,EAAC;YAC5B,gBAAgB;YAChB,aAAa;YACb,QAAQ;YACR,WAAW;YACX,eAAe;YACf,gBAAgB;YAChB,eAAe;YACf,cAAc;YACd,WAAW;YACX,KAAK,EAAE,UAAU;YACjB,UAAU;SACX,CAAC,CAAC;IACL,CAAC,EAAE;QACD,SAAS;QACT,MAAM;QACN,QAAQ;QACR,eAAe;QACf,WAAW;QACX,gBAAgB;QAChB,cAAc;QACd,WAAW;QACX,KAAK;QACL,UAAU;QACV,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO,CACL,8BAAC,SAAG,IACF,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,qBAAa,CAAC,KAAK,EAChC,KAAK,EAAE,KAAK,EACZ,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,CAAC,IAEd,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAErB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,CACL,8BAAC,UAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAC,SAAS,IAC1B,IAAI,CACA,CACR,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CACL,8BAAC,UAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAC,OAAO,IACxB,IAAI,CACA,CACR,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CACL,8BAAC,UAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAC,KAAK,IACtB,IAAI,CACA,CACR,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,CACL,8BAAC,UAAI,IAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,UACnB,IAAI,CACA,CACR,CAAC;QACJ,CAAC;QACD,OAAO,8BAAC,UAAI,IAAC,GAAG,EAAE,CAAC,IAAG,IAAI,CAAQ,CAAC;IACrC,CAAC,CAAC,CACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { TddPhase, TddStep, DashboardNode } from '../dashboard-types';
2
+ export interface ActScreenLine {
3
+ type: 'header' | 'phase-bar' | 'step' | 'progress' | 'empty';
4
+ text: string;
5
+ }
6
+ declare const PHASE_COLORS: Record<TddPhase, string>;
7
+ export { PHASE_COLORS };
8
+ export declare function renderTddPhaseBar(currentPhase: TddPhase | null, _width: number): ActScreenLine[];
9
+ export declare function renderProgressBar(percent: number, barWidth: number): string;
10
+ export declare function renderTddSteps(steps: readonly TddStep[], width: number): ActScreenLine[];
11
+ export declare function renderOverallProgress(agents: ReadonlyMap<string, DashboardNode>, steps: readonly TddStep[], width: number): ActScreenLine[];
12
+ export declare function renderActScreen(currentPhase: TddPhase | null, steps: readonly TddStep[], agents: ReadonlyMap<string, DashboardNode>, width: number): ActScreenLine[];
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PHASE_COLORS = void 0;
4
+ exports.renderTddPhaseBar = renderTddPhaseBar;
5
+ exports.renderProgressBar = renderProgressBar;
6
+ exports.renderTddSteps = renderTddSteps;
7
+ exports.renderOverallProgress = renderOverallProgress;
8
+ exports.renderActScreen = renderActScreen;
9
+ const PHASE_ICONS = {
10
+ RED: '🔴',
11
+ GREEN: '🟢',
12
+ REFACTOR: '🔧',
13
+ };
14
+ const PHASE_COLORS = {
15
+ RED: 'red',
16
+ GREEN: 'green',
17
+ REFACTOR: 'yellow',
18
+ };
19
+ exports.PHASE_COLORS = PHASE_COLORS;
20
+ function renderTddPhaseBar(currentPhase, _width) {
21
+ const lines = [];
22
+ lines.push({ type: 'header', text: '🧪 TDD Cycle' });
23
+ const phases = ['RED', 'GREEN', 'REFACTOR'];
24
+ const parts = phases.map(phase => {
25
+ const icon = PHASE_ICONS[phase];
26
+ const active = phase === currentPhase;
27
+ const marker = active ? '►' : ' ';
28
+ return `${marker}${icon} ${phase}`;
29
+ });
30
+ lines.push({ type: 'phase-bar', text: ` ${parts.join(' → ')}` });
31
+ return lines;
32
+ }
33
+ function renderProgressBar(percent, barWidth) {
34
+ const filled = Math.round((percent / 100) * barWidth);
35
+ const empty = barWidth - filled;
36
+ return `[${'█'.repeat(filled)}${'░'.repeat(empty)}] ${percent}%`;
37
+ }
38
+ function renderTddSteps(steps, width) {
39
+ const lines = [];
40
+ lines.push({ type: 'header', text: '📝 Steps' });
41
+ if (steps.length === 0) {
42
+ lines.push({ type: 'empty', text: ' (no steps yet)' });
43
+ return lines;
44
+ }
45
+ for (const step of steps) {
46
+ const statusIcon = getStepStatusIcon(step.status);
47
+ const phaseIcon = PHASE_ICONS[step.phase];
48
+ const agent = step.agentId ? ` [${step.agentId}]` : '';
49
+ const text = ` ${statusIcon} ${phaseIcon} ${step.label}${agent}`;
50
+ lines.push({ type: 'step', text: text.slice(0, width) });
51
+ }
52
+ return lines;
53
+ }
54
+ function getStepStatusIcon(status) {
55
+ switch (status) {
56
+ case 'pending':
57
+ return '○';
58
+ case 'active':
59
+ return '●';
60
+ case 'done':
61
+ return '✓';
62
+ case 'failed':
63
+ return '✗';
64
+ }
65
+ }
66
+ function renderOverallProgress(agents, steps, width) {
67
+ const lines = [];
68
+ const totalSteps = steps.length;
69
+ const doneSteps = steps.filter(s => s.status === 'done').length;
70
+ const stepPercent = totalSteps > 0 ? Math.round((doneSteps / totalSteps) * 100) : 0;
71
+ const agentArr = Array.from(agents.values()).filter(a => a.status !== 'idle' || a.isParallel);
72
+ const agentPercent = agentArr.length > 0
73
+ ? Math.round(agentArr.reduce((sum, a) => sum + a.progress, 0) / agentArr.length)
74
+ : 0;
75
+ const overallPercent = totalSteps > 0 ? stepPercent : agentPercent;
76
+ const barWidth = Math.max(10, Math.min(40, width - 20));
77
+ lines.push({ type: 'header', text: '📊 Overall Progress' });
78
+ lines.push({ type: 'progress', text: ` ${renderProgressBar(overallPercent, barWidth)}` });
79
+ if (totalSteps > 0) {
80
+ lines.push({ type: 'progress', text: ` Steps: ${doneSteps}/${totalSteps}` });
81
+ }
82
+ return lines;
83
+ }
84
+ function renderActScreen(currentPhase, steps, agents, width) {
85
+ const lines = [];
86
+ lines.push(...renderTddPhaseBar(currentPhase, width));
87
+ lines.push({ type: 'empty', text: '' });
88
+ lines.push(...renderTddSteps(steps, width));
89
+ lines.push({ type: 'empty', text: '' });
90
+ lines.push(...renderOverallProgress(agents, steps, width));
91
+ return lines;
92
+ }
93
+ //# sourceMappingURL=act-screen.pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"act-screen.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/act-screen.pure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { AgentOpinion, CrossReview, ConsensusResult, DiscussionRound, Stance } from '../../collaboration/types';
2
+ export interface DiscussionLine {
3
+ readonly text: string;
4
+ readonly type: 'opinion' | 'cross-review' | 'consensus' | 'header' | 'empty';
5
+ }
6
+ export declare const AGENT_PALETTE: readonly string[];
7
+ export interface AgentBubbleBlock {
8
+ readonly type: 'agent-bubble';
9
+ readonly agentName: string;
10
+ readonly agentAvatar: string;
11
+ readonly color: string;
12
+ readonly stanceIcon: string;
13
+ readonly reasoning: string;
14
+ readonly isConflict: boolean;
15
+ readonly stanceHistoryText: string;
16
+ }
17
+ export interface CrossReviewBlock {
18
+ readonly type: 'cross-review-block';
19
+ readonly fromName: string;
20
+ readonly fromAvatar: string;
21
+ readonly fromColor: string;
22
+ readonly toName: string;
23
+ readonly toAvatar: string;
24
+ readonly toColor: string;
25
+ readonly verb: string;
26
+ readonly comment: string;
27
+ }
28
+ export interface ConsensusBarBlock {
29
+ readonly type: 'consensus-bar';
30
+ readonly approveCount: number;
31
+ readonly concernCount: number;
32
+ readonly rejectCount: number;
33
+ readonly totalAgents: number;
34
+ readonly reached: boolean;
35
+ readonly percentage: number;
36
+ }
37
+ export interface HeaderBlock {
38
+ readonly type: 'header';
39
+ readonly text: string;
40
+ }
41
+ export interface EmptyBlock {
42
+ readonly type: 'empty';
43
+ readonly text: string;
44
+ }
45
+ export type DiscussionBlock = AgentBubbleBlock | CrossReviewBlock | ConsensusBarBlock | HeaderBlock | EmptyBlock;
46
+ export declare const CROSS_REVIEW_VERBS: Readonly<Record<Stance, string>>;
47
+ export declare function renderStanceHistory(stances: Stance[]): string;
48
+ export declare function assignAgentColors(rounds: readonly DiscussionRound[]): Record<string, string>;
49
+ export declare function detectConflicts(opinions: readonly AgentOpinion[]): Set<string>;
50
+ export declare function estimateBlockHeight(block: DiscussionBlock): number;
51
+ export declare function renderCollaborationBlocks(rounds: readonly DiscussionRound[], _width: number): DiscussionBlock[];
52
+ export declare function renderOpinionLine(opinion: AgentOpinion, stanceHistory?: Stance[]): DiscussionLine;
53
+ export declare function renderCrossReviewLine(review: CrossReview, agentNames: Record<string, string>): DiscussionLine;
54
+ export declare function renderConsensusLine(consensus: ConsensusResult): DiscussionLine;
55
+ export declare function renderDiscussionPanel(rounds: readonly DiscussionRound[], _width: number): DiscussionLine[];
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CROSS_REVIEW_VERBS = exports.AGENT_PALETTE = void 0;
4
+ exports.renderStanceHistory = renderStanceHistory;
5
+ exports.assignAgentColors = assignAgentColors;
6
+ exports.detectConflicts = detectConflicts;
7
+ exports.estimateBlockHeight = estimateBlockHeight;
8
+ exports.renderCollaborationBlocks = renderCollaborationBlocks;
9
+ exports.renderOpinionLine = renderOpinionLine;
10
+ exports.renderCrossReviewLine = renderCrossReviewLine;
11
+ exports.renderConsensusLine = renderConsensusLine;
12
+ exports.renderDiscussionPanel = renderDiscussionPanel;
13
+ const types_1 = require("../../collaboration/types");
14
+ const theme_1 = require("../utils/theme");
15
+ exports.AGENT_PALETTE = [
16
+ 'cyan',
17
+ 'magenta',
18
+ 'yellow',
19
+ 'green',
20
+ 'blue',
21
+ 'red',
22
+ 'white',
23
+ ];
24
+ exports.CROSS_REVIEW_VERBS = {
25
+ approve: 'agrees',
26
+ concern: 'notes',
27
+ reject: 'disagrees',
28
+ };
29
+ function renderStanceHistory(stances) {
30
+ if (stances.length <= 1)
31
+ return '';
32
+ return stances.map(s => types_1.STANCE_ICONS[s]).join(' → ');
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
+ }
148
+ function renderOpinionLine(opinion, stanceHistory) {
149
+ const avatar = (0, theme_1.getAgentAvatar)(opinion.agentName);
150
+ const icon = types_1.STANCE_ICONS[opinion.stance];
151
+ let suffix = '';
152
+ if (stanceHistory && stanceHistory.length > 1) {
153
+ const lastStance = stanceHistory[stanceHistory.length - 1];
154
+ const prevStance = stanceHistory[stanceHistory.length - 2];
155
+ if (lastStance !== prevStance) {
156
+ suffix = ` (${prevStance === 'reject' || prevStance === 'concern' ? 'revised' : 'alt'})`;
157
+ }
158
+ }
159
+ return {
160
+ text: `${avatar} ${opinion.agentName} ${icon} ${opinion.stance}${suffix}: "${opinion.reasoning}"`,
161
+ type: 'opinion',
162
+ };
163
+ }
164
+ function renderCrossReviewLine(review, agentNames) {
165
+ const fromAvatar = (0, theme_1.getAgentAvatar)(agentNames[review.fromAgentId] ?? 'unknown');
166
+ const fromName = agentNames[review.fromAgentId] ?? review.fromAgentId;
167
+ const toAvatar = (0, theme_1.getAgentAvatar)(agentNames[review.toAgentId] ?? 'unknown');
168
+ const toName = agentNames[review.toAgentId] ?? review.toAgentId;
169
+ const verb = exports.CROSS_REVIEW_VERBS[review.stance];
170
+ return {
171
+ text: `${fromAvatar} ${fromName} → ${toAvatar} ${toName} ${verb}: "${review.comment}"`,
172
+ type: 'cross-review',
173
+ };
174
+ }
175
+ function renderConsensusLine(consensus) {
176
+ const icon = consensus.reached ? '✅' : '❌';
177
+ return {
178
+ text: `${icon} Consensus: ${consensus.approveCount}/${consensus.totalAgents} | Critical: ${consensus.criticalCount}`,
179
+ type: 'consensus',
180
+ };
181
+ }
182
+ function renderDiscussionPanel(rounds, _width) {
183
+ if (rounds.length === 0) {
184
+ return [{ text: 'No agent discussion yet', type: 'empty' }];
185
+ }
186
+ const lines = [];
187
+ const agentNames = buildAgentNameMap(rounds);
188
+ const stanceHistories = buildStanceHistories(rounds);
189
+ const latestRound = rounds[rounds.length - 1];
190
+ lines.push({ text: `── Agent Discussion ──`, type: 'header' });
191
+ for (const opinion of latestRound.opinions) {
192
+ lines.push(renderOpinionLine(opinion, stanceHistories[opinion.agentId]));
193
+ }
194
+ for (const review of latestRound.crossReviews) {
195
+ lines.push(renderCrossReviewLine(review, agentNames));
196
+ }
197
+ const consensus = (0, types_1.calculateConsensus)(latestRound.opinions);
198
+ lines.push(renderConsensusLine(consensus));
199
+ return lines;
200
+ }
201
+ //# sourceMappingURL=agent-discussion-panel.pure.js.map
@@ -0,0 +1 @@
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[];