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.
- package/dist/src/agent/agent.module.js +3 -1
- package/dist/src/agent/agent.module.js.map +1 -1
- package/dist/src/agent/agent.service.d.ts +11 -4
- package/dist/src/agent/agent.service.js +81 -13
- package/dist/src/agent/agent.service.js.map +1 -1
- package/dist/src/agent/agent.types.d.ts +41 -1
- package/dist/src/agent/agent.types.js.map +1 -1
- package/dist/src/collaboration/discussion-engine.d.ts +14 -0
- package/dist/src/collaboration/discussion-engine.js +49 -0
- package/dist/src/collaboration/discussion-engine.js.map +1 -0
- package/dist/src/collaboration/index.d.ts +5 -0
- package/dist/src/collaboration/index.js +22 -0
- package/dist/src/collaboration/index.js.map +1 -0
- package/dist/src/collaboration/opinion-adapter.d.ts +14 -0
- package/dist/src/collaboration/opinion-adapter.js +56 -0
- package/dist/src/collaboration/opinion-adapter.js.map +1 -0
- package/dist/src/collaboration/terminal-formatter.d.ts +5 -0
- package/dist/src/collaboration/terminal-formatter.js +57 -0
- package/dist/src/collaboration/terminal-formatter.js.map +1 -0
- package/dist/src/collaboration/types.d.ts +50 -0
- package/dist/src/collaboration/types.js +53 -0
- package/dist/src/collaboration/types.js.map +1 -0
- package/dist/src/config/config.schema.d.ts +14 -0
- package/dist/src/config/config.schema.js +7 -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 +4 -2
- package/dist/src/context/context-document.service.js +24 -4
- package/dist/src/context/context-document.service.js.map +1 -1
- package/dist/src/context/context-document.types.d.ts +18 -0
- package/dist/src/context/context-document.types.js +13 -1
- package/dist/src/context/context-document.types.js.map +1 -1
- package/dist/src/context/context-parser.utils.js +32 -0
- package/dist/src/context/context-parser.utils.js.map +1 -1
- package/dist/src/context/context-serializer.utils.d.ts +3 -2
- package/dist/src/context/context-serializer.utils.js +25 -1
- package/dist/src/context/context-serializer.utils.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/explicit-pattern-matcher.d.ts +3 -0
- package/dist/src/keyword/explicit-pattern-matcher.js +34 -0
- package/dist/src/keyword/explicit-pattern-matcher.js.map +1 -0
- package/dist/src/keyword/keyword.module.js +17 -1
- package/dist/src/keyword/keyword.module.js.map +1 -1
- package/dist/src/keyword/keyword.service.d.ts +3 -0
- package/dist/src/keyword/keyword.service.js +33 -3
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +29 -1
- package/dist/src/keyword/keyword.types.js +34 -1
- package/dist/src/keyword/keyword.types.js.map +1 -1
- package/dist/src/keyword/primary-agent-resolver.d.ts +7 -3
- package/dist/src/keyword/primary-agent-resolver.js +24 -2
- package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
- package/dist/src/keyword/strategies/act-agent.strategy.js +16 -0
- package/dist/src/keyword/strategies/act-agent.strategy.js.map +1 -1
- package/dist/src/keyword/strategies/index.d.ts +1 -1
- package/dist/src/keyword/strategies/index.js.map +1 -1
- package/dist/src/keyword/strategies/resolution-strategy.interface.d.ts +5 -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 +4 -1
- package/dist/src/mcp/handlers/agent.handler.js +59 -6
- 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 +6 -1
- package/dist/src/mcp/handlers/context-document.handler.js +113 -12
- package/dist/src/mcp/handlers/context-document.handler.js.map +1 -1
- package/dist/src/mcp/handlers/discussion.handler.d.ts +14 -0
- package/dist/src/mcp/handlers/discussion.handler.js +168 -0
- package/dist/src/mcp/handlers/discussion.handler.js.map +1 -0
- package/dist/src/mcp/handlers/discussion.types.d.ts +18 -0
- package/dist/src/mcp/handlers/discussion.types.js +11 -0
- package/dist/src/mcp/handlers/discussion.types.js.map +1 -0
- 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 +6 -0
- package/dist/src/mcp/handlers/index.js +13 -1
- package/dist/src/mcp/handlers/index.js.map +1 -1
- package/dist/src/mcp/handlers/mode.handler.d.ts +7 -1
- package/dist/src/mcp/handlers/mode.handler.js +109 -3
- package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
- package/dist/src/mcp/handlers/pipeline.handler.d.ts +14 -0
- package/dist/src/mcp/handlers/pipeline.handler.js +137 -0
- package/dist/src/mcp/handlers/pipeline.handler.js.map +1 -0
- 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 +10 -0
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/parallel-validation/extract-file-paths.d.ts +1 -0
- package/dist/src/parallel-validation/extract-file-paths.js +19 -0
- package/dist/src/parallel-validation/extract-file-paths.js.map +1 -0
- package/dist/src/parallel-validation/index.d.ts +5 -0
- package/dist/src/parallel-validation/index.js +12 -0
- package/dist/src/parallel-validation/index.js.map +1 -0
- package/dist/src/parallel-validation/overlap-matrix.d.ts +10 -0
- package/dist/src/parallel-validation/overlap-matrix.js +23 -0
- package/dist/src/parallel-validation/overlap-matrix.js.map +1 -0
- package/dist/src/parallel-validation/parallel-validation.handler.d.ts +8 -0
- package/dist/src/parallel-validation/parallel-validation.handler.js +84 -0
- package/dist/src/parallel-validation/parallel-validation.handler.js.map +1 -0
- package/dist/src/parallel-validation/parallel-validation.types.d.ts +12 -0
- package/dist/src/parallel-validation/parallel-validation.types.js +3 -0
- package/dist/src/parallel-validation/parallel-validation.types.js.map +1 -0
- package/dist/src/parallel-validation/wave-splitter.d.ts +2 -0
- package/dist/src/parallel-validation/wave-splitter.js +39 -0
- package/dist/src/parallel-validation/wave-splitter.js.map +1 -0
- package/dist/src/pipeline/index.d.ts +5 -0
- package/dist/src/pipeline/index.js +14 -0
- package/dist/src/pipeline/index.js.map +1 -0
- package/dist/src/pipeline/pipeline.executors.d.ts +2 -0
- package/dist/src/pipeline/pipeline.executors.js +79 -0
- package/dist/src/pipeline/pipeline.executors.js.map +1 -0
- package/dist/src/pipeline/pipeline.module.d.ts +2 -0
- package/dist/src/pipeline/pipeline.module.js +21 -0
- package/dist/src/pipeline/pipeline.module.js.map +1 -0
- package/dist/src/pipeline/pipeline.service.d.ts +8 -0
- package/dist/src/pipeline/pipeline.service.js +89 -0
- package/dist/src/pipeline/pipeline.service.js.map +1 -0
- package/dist/src/pipeline/pipeline.types.d.ts +47 -0
- package/dist/src/pipeline/pipeline.types.js +33 -0
- package/dist/src/pipeline/pipeline.types.js.map +1 -0
- 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/rule-tracker.d.ts +24 -0
- package/dist/src/rules/rule-tracker.js +74 -0
- package/dist/src/rules/rule-tracker.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/event-bridge-reader.d.ts +17 -0
- package/dist/src/shared/event-bridge-reader.js +56 -0
- package/dist/src/shared/event-bridge-reader.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/src/tui/components/AgentDiscussionPanel.js +115 -0
- package/dist/src/tui/components/AgentDiscussionPanel.js.map +1 -0
- package/dist/src/tui/components/AgentDiscussionPanel.spec.d.ts +1 -0
- package/dist/src/tui/components/AgentDiscussionPanel.spec.js +229 -0
- package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +1 -0
- 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 +55 -0
- package/dist/src/tui/components/agent-discussion-panel.pure.js +201 -0
- package/dist/src/tui/components/agent-discussion-panel.pure.js.map +1 -0
- 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 +16 -0
- package/dist/src/tui/components/index.js +48 -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 -3
- package/dist/src/tui/dashboard-app.js.map +1 -1
- package/dist/src/tui/dashboard-types.d.ts +49 -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 +29 -1
- package/dist/src/tui/events/types.js +5 -0
- package/dist/src/tui/events/types.js.map +1 -1
- package/dist/src/tui/hooks/use-dashboard-state.d.ts +16 -1
- package/dist/src/tui/hooks/use-dashboard-state.js +70 -1
- package/dist/src/tui/hooks/use-dashboard-state.js.map +1 -1
- package/dist/src/tui-bundle.mjs +1023 -125
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- 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[];
|