@agents-ensemble/cli 0.0.0 → 0.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/async-operator-input.d.ts +6 -0
- package/dist/async-operator-input.d.ts.map +1 -0
- package/dist/async-operator-input.js +58 -0
- package/dist/async-operator-input.js.map +1 -0
- package/dist/display/create-session-display-sink.d.ts +9 -0
- package/dist/display/create-session-display-sink.d.ts.map +1 -0
- package/dist/display/create-session-display-sink.js +31 -0
- package/dist/display/create-session-display-sink.js.map +1 -0
- package/dist/display/select-session-display-backend.d.ts +11 -0
- package/dist/display/select-session-display-backend.d.ts.map +1 -0
- package/dist/display/select-session-display-backend.js +16 -0
- package/dist/display/select-session-display-backend.js.map +1 -0
- package/dist/display/session-display-backend.d.ts +7 -0
- package/dist/display/session-display-backend.d.ts.map +1 -0
- package/dist/display/session-display-backend.js +2 -0
- package/dist/display/session-display-backend.js.map +1 -0
- package/dist/display/session-display-reducer.d.ts +6 -0
- package/dist/display/session-display-reducer.d.ts.map +1 -0
- package/dist/display/session-display-reducer.js +74 -0
- package/dist/display/session-display-reducer.js.map +1 -0
- package/dist/display/session-display-state.d.ts +14 -0
- package/dist/display/session-display-state.d.ts.map +1 -0
- package/dist/display/session-display-state.js +6 -0
- package/dist/display/session-display-state.js.map +1 -0
- package/dist/display/string-session-display-backend.d.ts +8 -0
- package/dist/display/string-session-display-backend.d.ts.map +1 -0
- package/dist/display/string-session-display-backend.js +18 -0
- package/dist/display/string-session-display-backend.js.map +1 -0
- package/dist/display/stub-session-display-backend.d.ts +15 -0
- package/dist/display/stub-session-display-backend.d.ts.map +1 -0
- package/dist/display/stub-session-display-backend.js +17 -0
- package/dist/display/stub-session-display-backend.js.map +1 -0
- package/dist/format-models-list.d.ts +9 -0
- package/dist/format-models-list.d.ts.map +1 -0
- package/dist/format-models-list.js +17 -0
- package/dist/format-models-list.js.map +1 -0
- package/dist/format-session-summary.d.ts +4 -0
- package/dist/format-session-summary.d.ts.map +1 -0
- package/dist/format-session-summary.js +25 -0
- package/dist/format-session-summary.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +124 -0
- package/dist/index.js.map +1 -0
- package/dist/issue-command.d.ts +38 -0
- package/dist/issue-command.d.ts.map +1 -0
- package/dist/issue-command.js +117 -0
- package/dist/issue-command.js.map +1 -0
- package/dist/parse-worktree-mode.d.ts +4 -0
- package/dist/parse-worktree-mode.d.ts.map +1 -0
- package/dist/parse-worktree-mode.js +10 -0
- package/dist/parse-worktree-mode.js.map +1 -0
- package/dist/prompt-human-inquiry.d.ts +3 -0
- package/dist/prompt-human-inquiry.d.ts.map +1 -0
- package/dist/prompt-human-inquiry.js +29 -0
- package/dist/prompt-human-inquiry.js.map +1 -0
- package/dist/prompt-operator-input.d.ts +7 -0
- package/dist/prompt-operator-input.d.ts.map +1 -0
- package/dist/prompt-operator-input.js +51 -0
- package/dist/prompt-operator-input.js.map +1 -0
- package/dist/prompt-permission.d.ts +4 -0
- package/dist/prompt-permission.d.ts.map +1 -0
- package/dist/prompt-permission.js +8 -0
- package/dist/prompt-permission.js.map +1 -0
- package/dist/resolve-cli-max-turns.d.ts +8 -0
- package/dist/resolve-cli-max-turns.d.ts.map +1 -0
- package/dist/resolve-cli-max-turns.js +13 -0
- package/dist/resolve-cli-max-turns.js.map +1 -0
- package/dist/session-log-lines.d.ts +10 -0
- package/dist/session-log-lines.d.ts.map +1 -0
- package/dist/session-log-lines.js +121 -0
- package/dist/session-log-lines.js.map +1 -0
- package/dist/session-sinks.d.ts +20 -0
- package/dist/session-sinks.d.ts.map +1 -0
- package/dist/session-sinks.js +67 -0
- package/dist/session-sinks.js.map +1 -0
- package/dist/tui/activity-log.d.ts +32 -0
- package/dist/tui/activity-log.d.ts.map +1 -0
- package/dist/tui/activity-log.js +79 -0
- package/dist/tui/activity-log.js.map +1 -0
- package/dist/tui/compute-operator-input-cursor-y.d.ts +48 -0
- package/dist/tui/compute-operator-input-cursor-y.d.ts.map +1 -0
- package/dist/tui/compute-operator-input-cursor-y.js +52 -0
- package/dist/tui/compute-operator-input-cursor-y.js.map +1 -0
- package/dist/tui/create-issue-session-tui-host.d.ts +12 -0
- package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -0
- package/dist/tui/create-issue-session-tui-host.js +88 -0
- package/dist/tui/create-issue-session-tui-host.js.map +1 -0
- package/dist/tui/create-issue-session-tui-host.test.d.ts +2 -0
- package/dist/tui/create-issue-session-tui-host.test.d.ts.map +1 -0
- package/dist/tui/create-issue-session-tui-host.test.js +133 -0
- package/dist/tui/create-issue-session-tui-host.test.js.map +1 -0
- package/dist/tui/create-tui-telemetry-sink.d.ts +5 -0
- package/dist/tui/create-tui-telemetry-sink.d.ts.map +1 -0
- package/dist/tui/create-tui-telemetry-sink.js +18 -0
- package/dist/tui/create-tui-telemetry-sink.js.map +1 -0
- package/dist/tui/format-operator-context.d.ts +9 -0
- package/dist/tui/format-operator-context.d.ts.map +1 -0
- package/dist/tui/format-operator-context.js +17 -0
- package/dist/tui/format-operator-context.js.map +1 -0
- package/dist/tui/ime-text-input.d.ts +31 -0
- package/dist/tui/ime-text-input.d.ts.map +1 -0
- package/dist/tui/ime-text-input.js +111 -0
- package/dist/tui/ime-text-input.js.map +1 -0
- package/dist/tui/ime-text-input.test.d.ts +2 -0
- package/dist/tui/ime-text-input.test.d.ts.map +1 -0
- package/dist/tui/ime-text-input.test.js +62 -0
- package/dist/tui/ime-text-input.test.js.map +1 -0
- package/dist/tui/ink-test-keys.d.ts +22 -0
- package/dist/tui/ink-test-keys.d.ts.map +1 -0
- package/dist/tui/ink-test-keys.js +26 -0
- package/dist/tui/ink-test-keys.js.map +1 -0
- package/dist/tui/issue-session-tui.d.ts +8 -0
- package/dist/tui/issue-session-tui.d.ts.map +1 -0
- package/dist/tui/issue-session-tui.js +201 -0
- package/dist/tui/issue-session-tui.js.map +1 -0
- package/dist/tui/issue-session-tui.test.d.ts +2 -0
- package/dist/tui/issue-session-tui.test.d.ts.map +1 -0
- package/dist/tui/issue-session-tui.test.js +529 -0
- package/dist/tui/issue-session-tui.test.js.map +1 -0
- package/dist/tui/open-questions-pane.d.ts +32 -0
- package/dist/tui/open-questions-pane.d.ts.map +1 -0
- package/dist/tui/open-questions-pane.js +101 -0
- package/dist/tui/open-questions-pane.js.map +1 -0
- package/dist/tui/operator-input-key-reducer.d.ts +36 -0
- package/dist/tui/operator-input-key-reducer.d.ts.map +1 -0
- package/dist/tui/operator-input-key-reducer.js +141 -0
- package/dist/tui/operator-input-key-reducer.js.map +1 -0
- package/dist/tui/operator-input-layout.d.ts +29 -0
- package/dist/tui/operator-input-layout.d.ts.map +1 -0
- package/dist/tui/operator-input-layout.js +120 -0
- package/dist/tui/operator-input-layout.js.map +1 -0
- package/dist/tui/orchestration-pane-frame.d.ts +9 -0
- package/dist/tui/orchestration-pane-frame.d.ts.map +1 -0
- package/dist/tui/orchestration-pane-frame.js +27 -0
- package/dist/tui/orchestration-pane-frame.js.map +1 -0
- package/dist/tui/tui-layout-constants.d.ts +48 -0
- package/dist/tui/tui-layout-constants.d.ts.map +1 -0
- package/dist/tui/tui-layout-constants.js +48 -0
- package/dist/tui/tui-layout-constants.js.map +1 -0
- package/dist/tui/tui-view-model.d.ts +20 -0
- package/dist/tui/tui-view-model.d.ts.map +1 -0
- package/dist/tui/tui-view-model.js +69 -0
- package/dist/tui/tui-view-model.js.map +1 -0
- package/dist/tui/wrap-text-to-width.d.ts +14 -0
- package/dist/tui/wrap-text-to-width.d.ts.map +1 -0
- package/dist/tui/wrap-text-to-width.js +55 -0
- package/dist/tui/wrap-text-to-width.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { cleanup, render } from 'ink-testing-library';
|
|
4
|
+
import { IssueSessionTui } from './issue-session-tui.js';
|
|
5
|
+
import { createTuiViewModel } from './tui-view-model.js';
|
|
6
|
+
import { buildActivityLogDisplayLines } from './activity-log.js';
|
|
7
|
+
import { formatOperatorContextHint } from './format-operator-context.js';
|
|
8
|
+
import { flushInkStdin, INK_TEST_KEYS } from './ink-test-keys.js';
|
|
9
|
+
import { extractOrchestrationPaneFrameStats } from './orchestration-pane-frame.js';
|
|
10
|
+
import { resolveOpenQuestionsPaneLayout } from './open-questions-pane.js';
|
|
11
|
+
import { computeActivityLogLineCapacity, computeActivityPaneHeight, computeOrchestrationLogVisibleLineCount, computeOperatorInputCursorX, computeOperatorInputLineIndex, } from './compute-operator-input-cursor-y.js';
|
|
12
|
+
import { getPaneContentWidth, wrapTextToWidth } from './wrap-text-to-width.js';
|
|
13
|
+
import { MAIN_PANE_TITLE, OPEN_QUESTIONS_PANE_MIN_HEIGHT, OPERATOR_INPUT_CURSOR_Y_OFFSET, PANE_PADDING_X, ROUND_BORDER_WIDTH, } from './tui-layout-constants.js';
|
|
14
|
+
function findOperatorInputLine(lines) {
|
|
15
|
+
const operatorLineIndices = lines
|
|
16
|
+
.map((line, index) => (line.includes('operator>') ? index : -1))
|
|
17
|
+
.filter((index) => index >= 0);
|
|
18
|
+
const lineIndex = operatorLineIndices.at(-1) ?? -1;
|
|
19
|
+
const line = lines[lineIndex] ?? '';
|
|
20
|
+
const promptIndex = line.lastIndexOf('operator> ');
|
|
21
|
+
const inputStartX = promptIndex >= 0 ? promptIndex + 'operator> '.length : -1;
|
|
22
|
+
return { lineIndex, inputStartX };
|
|
23
|
+
}
|
|
24
|
+
function expectNoContentOnBorderLines(frame) {
|
|
25
|
+
for (const line of frame.split('\n')) {
|
|
26
|
+
if (line.startsWith('╭') || line.startsWith('╰') || line.startsWith('┌') || line.startsWith('└')) {
|
|
27
|
+
expect(line).not.toMatch(/\[(?:operator|conductor|implementer|reviewer)\]/);
|
|
28
|
+
expect(line).not.toMatch(/operator>/);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function fillScrollableHarnessLog(viewModel, count = 30) {
|
|
33
|
+
for (let index = 0; index < count; index++) {
|
|
34
|
+
viewModel.appendActivityLog('harness', `line-${index}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const SCROLL_HINT = 'PgUp/PgDn でスクロール';
|
|
38
|
+
function createOpenQuestion(overrides) {
|
|
39
|
+
return {
|
|
40
|
+
responseType: 'text',
|
|
41
|
+
source: 'conductor',
|
|
42
|
+
status: 'open',
|
|
43
|
+
askedAt: 1,
|
|
44
|
+
...overrides,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function resolveOpenQuestionsPaneHeight(openQuestions, terminalRows = 24, terminalColumns = 80) {
|
|
48
|
+
return resolveOpenQuestionsPaneLayout({
|
|
49
|
+
openQuestions,
|
|
50
|
+
selectedIndex: 0,
|
|
51
|
+
contentWidth: getPaneContentWidth({
|
|
52
|
+
columns: terminalColumns,
|
|
53
|
+
paddingX: PANE_PADDING_X,
|
|
54
|
+
borderWidth: ROUND_BORDER_WIDTH,
|
|
55
|
+
}),
|
|
56
|
+
terminalRows,
|
|
57
|
+
}).paneHeight;
|
|
58
|
+
}
|
|
59
|
+
describe('IssueSessionTui', () => {
|
|
60
|
+
beforeEach(() => {
|
|
61
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
62
|
+
configurable: true,
|
|
63
|
+
value: 24,
|
|
64
|
+
});
|
|
65
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
66
|
+
configurable: true,
|
|
67
|
+
value: 80,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
afterEach(() => {
|
|
71
|
+
cleanup();
|
|
72
|
+
vi.restoreAllMocks();
|
|
73
|
+
});
|
|
74
|
+
it('renders four panes with worker, session log, open questions, and input', () => {
|
|
75
|
+
const viewModel = createTuiViewModel();
|
|
76
|
+
viewModel.setDisplayState({
|
|
77
|
+
workers: {
|
|
78
|
+
implementer: { kind: 'implementer', status: 'running' },
|
|
79
|
+
},
|
|
80
|
+
conductorOutput: null,
|
|
81
|
+
openQuestions: [
|
|
82
|
+
{
|
|
83
|
+
id: 'inq-1',
|
|
84
|
+
question: 'Approve?',
|
|
85
|
+
responseType: 'text',
|
|
86
|
+
source: 'conductor',
|
|
87
|
+
status: 'open',
|
|
88
|
+
askedAt: 1,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
});
|
|
92
|
+
viewModel.appendActivityLog('operator', 'operator ping');
|
|
93
|
+
viewModel.appendActivityLog('conductor', 'conductor says hi');
|
|
94
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
95
|
+
const frame = lastFrame() ?? '';
|
|
96
|
+
expect(frame).toContain('Workers');
|
|
97
|
+
expect(frame).toContain('implementer');
|
|
98
|
+
expect(frame).toContain('Orchestration');
|
|
99
|
+
expect(frame).toContain('[operator] operator ping');
|
|
100
|
+
expect(frame).toContain('[conductor] conductor says hi');
|
|
101
|
+
expect(frame).toContain('Open questions');
|
|
102
|
+
expect(frame).toContain('inq-1');
|
|
103
|
+
expect(frame).toContain('1/1');
|
|
104
|
+
expect(frame).toContain('Shift+↑↓で選択');
|
|
105
|
+
expect(frame).toContain('operator>');
|
|
106
|
+
});
|
|
107
|
+
it('shows post-loop hint in input area', () => {
|
|
108
|
+
const viewModel = createTuiViewModel();
|
|
109
|
+
viewModel.setPostLoopWaiting(true);
|
|
110
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
111
|
+
expect(lastFrame() ?? '').toContain('post-loop 待機中');
|
|
112
|
+
});
|
|
113
|
+
it('aligns IME cursor coordinates with the rendered operator input line', () => {
|
|
114
|
+
const terminalRows = 24;
|
|
115
|
+
const terminalColumns = 80;
|
|
116
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
117
|
+
configurable: true,
|
|
118
|
+
get: () => terminalColumns,
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
121
|
+
configurable: true,
|
|
122
|
+
get: () => terminalRows,
|
|
123
|
+
});
|
|
124
|
+
const viewModel = createTuiViewModel();
|
|
125
|
+
viewModel.setOperatorContext({
|
|
126
|
+
conductorTurn: 1,
|
|
127
|
+
autonomousTurns: 0,
|
|
128
|
+
maxTurns: null,
|
|
129
|
+
openQuestions: [],
|
|
130
|
+
});
|
|
131
|
+
const operatorPrompt = 'operator> ';
|
|
132
|
+
const contentWidth = getPaneContentWidth({
|
|
133
|
+
columns: terminalColumns,
|
|
134
|
+
paddingX: PANE_PADDING_X,
|
|
135
|
+
borderWidth: ROUND_BORDER_WIDTH,
|
|
136
|
+
});
|
|
137
|
+
const contextHint = formatOperatorContextHint(viewModel.getSnapshot().operatorContext);
|
|
138
|
+
const hintLineCount = wrapTextToWidth(contextHint, contentWidth).length;
|
|
139
|
+
const openQuestionsPaneHeight = OPEN_QUESTIONS_PANE_MIN_HEIGHT;
|
|
140
|
+
const expectedInputLineIndex = computeOperatorInputLineIndex({
|
|
141
|
+
terminalRows,
|
|
142
|
+
hintLineCount,
|
|
143
|
+
openQuestionsPaneHeight,
|
|
144
|
+
});
|
|
145
|
+
const expectedCursorX = computeOperatorInputCursorX(operatorPrompt);
|
|
146
|
+
const expectedCursorY = expectedInputLineIndex + OPERATOR_INPUT_CURSOR_Y_OFFSET;
|
|
147
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
148
|
+
const lines = (lastFrame() ?? '').split('\n');
|
|
149
|
+
const { lineIndex, inputStartX } = findOperatorInputLine(lines);
|
|
150
|
+
expect(lineIndex).toBeGreaterThanOrEqual(0);
|
|
151
|
+
expect(inputStartX).toBe(expectedCursorX);
|
|
152
|
+
expect(lineIndex).toBe(expectedInputLineIndex);
|
|
153
|
+
expect(expectedCursorY).toBe(lineIndex + OPERATOR_INPUT_CURSOR_Y_OFFSET);
|
|
154
|
+
expect(lines).toHaveLength(terminalRows);
|
|
155
|
+
});
|
|
156
|
+
it('aligns IME cursor coordinates when context hint wraps on a narrow terminal', () => {
|
|
157
|
+
const terminalRows = 24;
|
|
158
|
+
const terminalColumns = 40;
|
|
159
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
160
|
+
configurable: true,
|
|
161
|
+
get: () => terminalColumns,
|
|
162
|
+
});
|
|
163
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
164
|
+
configurable: true,
|
|
165
|
+
get: () => terminalRows,
|
|
166
|
+
});
|
|
167
|
+
const viewModel = createTuiViewModel();
|
|
168
|
+
viewModel.setOperatorContext({
|
|
169
|
+
conductorTurn: 1,
|
|
170
|
+
autonomousTurns: 0,
|
|
171
|
+
maxTurns: null,
|
|
172
|
+
openQuestions: [],
|
|
173
|
+
});
|
|
174
|
+
const operatorPrompt = 'operator> ';
|
|
175
|
+
const contentWidth = getPaneContentWidth({
|
|
176
|
+
columns: terminalColumns,
|
|
177
|
+
paddingX: PANE_PADDING_X,
|
|
178
|
+
borderWidth: ROUND_BORDER_WIDTH,
|
|
179
|
+
});
|
|
180
|
+
const contextHint = formatOperatorContextHint(viewModel.getSnapshot().operatorContext);
|
|
181
|
+
const hintLineCount = wrapTextToWidth(contextHint, contentWidth).length;
|
|
182
|
+
const openQuestionsPaneHeight = OPEN_QUESTIONS_PANE_MIN_HEIGHT;
|
|
183
|
+
const expectedInputLineIndex = computeOperatorInputLineIndex({
|
|
184
|
+
terminalRows,
|
|
185
|
+
hintLineCount,
|
|
186
|
+
openQuestionsPaneHeight,
|
|
187
|
+
});
|
|
188
|
+
const expectedCursorX = computeOperatorInputCursorX(operatorPrompt);
|
|
189
|
+
const expectedCursorY = expectedInputLineIndex + OPERATOR_INPUT_CURSOR_Y_OFFSET;
|
|
190
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
191
|
+
const lines = (lastFrame() ?? '').split('\n');
|
|
192
|
+
const { lineIndex, inputStartX } = findOperatorInputLine(lines);
|
|
193
|
+
expect(hintLineCount).toBeGreaterThan(1);
|
|
194
|
+
expect(lineIndex).toBeGreaterThanOrEqual(0);
|
|
195
|
+
expect(inputStartX).toBe(expectedCursorX);
|
|
196
|
+
expect(lineIndex).toBe(expectedInputLineIndex);
|
|
197
|
+
expect(expectedCursorY).toBe(lineIndex + OPERATOR_INPUT_CURSOR_Y_OFFSET);
|
|
198
|
+
expect(lines).toHaveLength(terminalRows);
|
|
199
|
+
});
|
|
200
|
+
it('shows conductor thinking during in-flight send then idle on completion', () => {
|
|
201
|
+
const viewModel = createTuiViewModel();
|
|
202
|
+
viewModel.setDisplayState({
|
|
203
|
+
workers: {
|
|
204
|
+
conductor: { kind: 'conductor', status: 'running' },
|
|
205
|
+
implementer: { kind: 'implementer', status: 'idle' },
|
|
206
|
+
},
|
|
207
|
+
conductorOutput: null,
|
|
208
|
+
openQuestions: [],
|
|
209
|
+
});
|
|
210
|
+
const { lastFrame: thinkingFrame, unmount: unmountThinking } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
211
|
+
expect(thinkingFrame() ?? '').toContain('conductor: thinking');
|
|
212
|
+
unmountThinking();
|
|
213
|
+
viewModel.setDisplayState({
|
|
214
|
+
workers: {
|
|
215
|
+
conductor: { kind: 'conductor', status: 'idle' },
|
|
216
|
+
implementer: { kind: 'implementer', status: 'idle' },
|
|
217
|
+
},
|
|
218
|
+
conductorOutput: 'done',
|
|
219
|
+
openQuestions: [],
|
|
220
|
+
});
|
|
221
|
+
const { lastFrame: idleFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
222
|
+
expect(idleFrame() ?? '').toContain('conductor: idle');
|
|
223
|
+
expect(idleFrame() ?? '').not.toContain('conductor: thinking');
|
|
224
|
+
});
|
|
225
|
+
it('does not bleed activity log text onto pane border lines', () => {
|
|
226
|
+
const terminalRows = 24;
|
|
227
|
+
const terminalColumns = 80;
|
|
228
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
229
|
+
configurable: true,
|
|
230
|
+
get: () => terminalColumns,
|
|
231
|
+
});
|
|
232
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
233
|
+
configurable: true,
|
|
234
|
+
get: () => terminalRows,
|
|
235
|
+
});
|
|
236
|
+
const viewModel = createTuiViewModel();
|
|
237
|
+
viewModel.setDisplayState({
|
|
238
|
+
workers: {
|
|
239
|
+
conductor: { kind: 'conductor', status: 'running' },
|
|
240
|
+
implementer: { kind: 'implementer', status: 'running' },
|
|
241
|
+
reviewer: { kind: 'reviewer', status: 'idle' },
|
|
242
|
+
},
|
|
243
|
+
conductorOutput: null,
|
|
244
|
+
openQuestions: [
|
|
245
|
+
{
|
|
246
|
+
id: 'inq-1',
|
|
247
|
+
question: 'Approve?',
|
|
248
|
+
responseType: 'text',
|
|
249
|
+
source: 'conductor',
|
|
250
|
+
status: 'open',
|
|
251
|
+
askedAt: 1,
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
});
|
|
255
|
+
viewModel.setOperatorContext({
|
|
256
|
+
conductorTurn: 1,
|
|
257
|
+
autonomousTurns: 0,
|
|
258
|
+
maxTurns: null,
|
|
259
|
+
openQuestions: [],
|
|
260
|
+
});
|
|
261
|
+
for (let i = 0; i < 12; i++) {
|
|
262
|
+
viewModel.appendActivityLog('conductor', `activity line ${i} with some longer text`);
|
|
263
|
+
}
|
|
264
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
265
|
+
const frame = lastFrame() ?? '';
|
|
266
|
+
expect(frame).toContain('Workers');
|
|
267
|
+
expectNoContentOnBorderLines(frame);
|
|
268
|
+
expect(frame.split('\n')).toHaveLength(terminalRows);
|
|
269
|
+
});
|
|
270
|
+
it('shows empty-state placeholders when no session activity yet', () => {
|
|
271
|
+
const viewModel = createTuiViewModel();
|
|
272
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
273
|
+
const frame = lastFrame() ?? '';
|
|
274
|
+
expect(frame).toContain('(待機中)');
|
|
275
|
+
expect(frame).toContain('(活動ログなし)');
|
|
276
|
+
expect(frame).toContain('(未回答なし)');
|
|
277
|
+
});
|
|
278
|
+
it('renders all activity log label kinds with distinct markers', () => {
|
|
279
|
+
const viewModel = createTuiViewModel();
|
|
280
|
+
viewModel.appendActivityLog('operator', 'op');
|
|
281
|
+
viewModel.appendActivityLog('harness', 'tel');
|
|
282
|
+
viewModel.appendActivityLog('observation', 'obs');
|
|
283
|
+
viewModel.appendActivityLog('conductor', 'cond');
|
|
284
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
285
|
+
const frame = lastFrame() ?? '';
|
|
286
|
+
expect(frame).toContain('[operator] op');
|
|
287
|
+
expect(frame).toContain('[harness] tel');
|
|
288
|
+
expect(frame).toContain('[observation] obs');
|
|
289
|
+
expect(frame).toContain('[conductor] cond');
|
|
290
|
+
});
|
|
291
|
+
it('keeps orchestration title visible when log pane is full', () => {
|
|
292
|
+
const viewModel = createTuiViewModel();
|
|
293
|
+
fillScrollableHarnessLog(viewModel, 100);
|
|
294
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
295
|
+
expect(lastFrame() ?? '').toContain('Orchestration');
|
|
296
|
+
});
|
|
297
|
+
it('fills orchestration pane when scroll hint wraps the title', async () => {
|
|
298
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
299
|
+
configurable: true,
|
|
300
|
+
value: 40,
|
|
301
|
+
});
|
|
302
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
303
|
+
configurable: true,
|
|
304
|
+
value: 24,
|
|
305
|
+
});
|
|
306
|
+
const viewModel = createTuiViewModel();
|
|
307
|
+
fillScrollableHarnessLog(viewModel, 50);
|
|
308
|
+
const { stdin, lastFrame, unmount } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
309
|
+
stdin.write(INK_TEST_KEYS.pageUp);
|
|
310
|
+
await flushInkStdin();
|
|
311
|
+
const capacity = computeOrchestrationLogVisibleLineCount(computeActivityPaneHeight({
|
|
312
|
+
terminalRows: 24,
|
|
313
|
+
hintLineCount: 1,
|
|
314
|
+
openQuestionsPaneHeight: OPEN_QUESTIONS_PANE_MIN_HEIGHT,
|
|
315
|
+
}), wrapTextToWidth(`${MAIN_PANE_TITLE} (PgUp/PgDn でスクロール · 最新へは End · 入力中は Ctrl+PgUp/PgDn)`, getPaneContentWidth({
|
|
316
|
+
columns: 40,
|
|
317
|
+
paddingX: PANE_PADDING_X,
|
|
318
|
+
borderWidth: ROUND_BORDER_WIDTH,
|
|
319
|
+
})).length);
|
|
320
|
+
const stats = extractOrchestrationPaneFrameStats(lastFrame() ?? '');
|
|
321
|
+
expect(lastFrame() ?? '').toContain(SCROLL_HINT);
|
|
322
|
+
expect(stats.logRows.length).toBeGreaterThanOrEqual(capacity);
|
|
323
|
+
expect(stats.blankRows).toHaveLength(0);
|
|
324
|
+
unmount();
|
|
325
|
+
});
|
|
326
|
+
it('fills orchestration pane log rows without unused inner blank lines', () => {
|
|
327
|
+
for (const terminalRows of [24, 40, 50]) {
|
|
328
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
329
|
+
configurable: true,
|
|
330
|
+
value: terminalRows,
|
|
331
|
+
});
|
|
332
|
+
const viewModel = createTuiViewModel();
|
|
333
|
+
fillScrollableHarnessLog(viewModel, 100);
|
|
334
|
+
const { lastFrame, unmount } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
335
|
+
const capacity = computeActivityLogLineCapacity({
|
|
336
|
+
terminalRows,
|
|
337
|
+
hintLineCount: 1,
|
|
338
|
+
openQuestionsPaneHeight: OPEN_QUESTIONS_PANE_MIN_HEIGHT,
|
|
339
|
+
});
|
|
340
|
+
const stats = extractOrchestrationPaneFrameStats(lastFrame() ?? '');
|
|
341
|
+
expect(capacity).toBeGreaterThan(0);
|
|
342
|
+
expect(stats.logRows.length).toBeGreaterThanOrEqual(capacity);
|
|
343
|
+
expect(stats.blankRows).toHaveLength(0);
|
|
344
|
+
unmount();
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
it('windowing hides older log lines when orchestration pane is full', () => {
|
|
348
|
+
const viewModel = createTuiViewModel();
|
|
349
|
+
for (let index = 0; index < 30; index++) {
|
|
350
|
+
viewModel.appendActivityLog('harness', `line-${index}`);
|
|
351
|
+
}
|
|
352
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
353
|
+
const frame = lastFrame() ?? '';
|
|
354
|
+
expect(frame).toContain('[harness] line-29');
|
|
355
|
+
expect(frame).not.toContain('[harness] line-0');
|
|
356
|
+
});
|
|
357
|
+
it('renders multi-line activity body at full width without label-column indent', () => {
|
|
358
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
359
|
+
configurable: true,
|
|
360
|
+
value: 30,
|
|
361
|
+
});
|
|
362
|
+
const viewModel = createTuiViewModel();
|
|
363
|
+
viewModel.appendActivityLog('conductor', 'alpha beta gamma');
|
|
364
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
365
|
+
const frame = lastFrame() ?? '';
|
|
366
|
+
const continuationIndent = ' '.repeat('[conductor] '.length);
|
|
367
|
+
expect(frame).toContain('[conductor]');
|
|
368
|
+
expect(frame).not.toContain(`${continuationIndent}alpha`);
|
|
369
|
+
expect(frame).not.toContain(`${continuationIndent}beta`);
|
|
370
|
+
});
|
|
371
|
+
it('keeps one-line entries as inline label and body', () => {
|
|
372
|
+
const viewModel = createTuiViewModel();
|
|
373
|
+
viewModel.appendActivityLog('operator', 'ping');
|
|
374
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
375
|
+
expect(lastFrame() ?? '').toContain('[operator] ping');
|
|
376
|
+
});
|
|
377
|
+
it('uses manual wrap only (display line count matches wrap helper)', () => {
|
|
378
|
+
const viewModel = createTuiViewModel();
|
|
379
|
+
viewModel.appendActivityLog('conductor', 'word '.repeat(30));
|
|
380
|
+
const contentWidth = 76;
|
|
381
|
+
const expectedLines = buildActivityLogDisplayLines(viewModel.getSnapshot().activityLog, contentWidth).length;
|
|
382
|
+
render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
383
|
+
expect(expectedLines).toBeGreaterThan(1);
|
|
384
|
+
});
|
|
385
|
+
it('renders multi-line operator input in activity log', () => {
|
|
386
|
+
const viewModel = createTuiViewModel();
|
|
387
|
+
viewModel.appendActivityLog('operator', 'first line\nsecond line');
|
|
388
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
389
|
+
const frame = lastFrame() ?? '';
|
|
390
|
+
expect(frame).toContain('[operator]');
|
|
391
|
+
expect(frame).toContain('first line');
|
|
392
|
+
expect(frame).toContain('second line');
|
|
393
|
+
});
|
|
394
|
+
describe('open questions selection (stdin integration)', () => {
|
|
395
|
+
it('cycles selection with Shift+arrow keys', async () => {
|
|
396
|
+
const viewModel = createTuiViewModel();
|
|
397
|
+
viewModel.setDisplayState({
|
|
398
|
+
workers: {},
|
|
399
|
+
conductorOutput: null,
|
|
400
|
+
openQuestions: [
|
|
401
|
+
createOpenQuestion({ id: 'inq-1', question: 'First question' }),
|
|
402
|
+
createOpenQuestion({ id: 'inq-2', question: 'Second question' }),
|
|
403
|
+
],
|
|
404
|
+
});
|
|
405
|
+
const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
406
|
+
expect(lastFrame() ?? '').toContain('▸ inq-1');
|
|
407
|
+
stdin.write(INK_TEST_KEYS.shiftDownArrow);
|
|
408
|
+
await flushInkStdin();
|
|
409
|
+
const frame = lastFrame() ?? '';
|
|
410
|
+
expect(frame).toContain('2/2');
|
|
411
|
+
expect(frame).toContain('▸ inq-2');
|
|
412
|
+
});
|
|
413
|
+
it('does not change selection on plain arrow keys', async () => {
|
|
414
|
+
const viewModel = createTuiViewModel();
|
|
415
|
+
viewModel.setDisplayState({
|
|
416
|
+
workers: {},
|
|
417
|
+
conductorOutput: null,
|
|
418
|
+
openQuestions: [
|
|
419
|
+
createOpenQuestion({ id: 'inq-1', question: 'First question' }),
|
|
420
|
+
createOpenQuestion({ id: 'inq-2', question: 'Second question' }),
|
|
421
|
+
],
|
|
422
|
+
});
|
|
423
|
+
const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
424
|
+
stdin.write(INK_TEST_KEYS.downArrow);
|
|
425
|
+
await flushInkStdin();
|
|
426
|
+
expect(lastFrame() ?? '').toContain('▸ inq-1');
|
|
427
|
+
expect(lastFrame() ?? '').not.toContain('2/2');
|
|
428
|
+
});
|
|
429
|
+
it('submits selected question answer with targetOpenQuestionId', async () => {
|
|
430
|
+
const viewModel = createTuiViewModel();
|
|
431
|
+
viewModel.setDisplayState({
|
|
432
|
+
workers: {},
|
|
433
|
+
conductorOutput: null,
|
|
434
|
+
openQuestions: [
|
|
435
|
+
createOpenQuestion({ id: 'inq-1', question: 'First' }),
|
|
436
|
+
createOpenQuestion({ id: 'inq-2', question: 'Second' }),
|
|
437
|
+
],
|
|
438
|
+
});
|
|
439
|
+
let submitted = '';
|
|
440
|
+
let submitOptions;
|
|
441
|
+
const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: (text, options) => {
|
|
442
|
+
submitted = text;
|
|
443
|
+
submitOptions = options;
|
|
444
|
+
} }));
|
|
445
|
+
stdin.write(INK_TEST_KEYS.shiftDownArrow);
|
|
446
|
+
await flushInkStdin();
|
|
447
|
+
expect(lastFrame() ?? '').toContain('▸ inq-2');
|
|
448
|
+
stdin.write('approved');
|
|
449
|
+
await flushInkStdin();
|
|
450
|
+
stdin.write('\r');
|
|
451
|
+
await flushInkStdin();
|
|
452
|
+
expect(submitted).toBe('approved');
|
|
453
|
+
expect(submitOptions).toEqual({ targetOpenQuestionId: 'inq-2' });
|
|
454
|
+
});
|
|
455
|
+
it('grows open questions pane for long selected question text', () => {
|
|
456
|
+
const viewModel = createTuiViewModel();
|
|
457
|
+
viewModel.setDisplayState({
|
|
458
|
+
workers: {},
|
|
459
|
+
conductorOutput: null,
|
|
460
|
+
openQuestions: [
|
|
461
|
+
createOpenQuestion({
|
|
462
|
+
id: 'inq-long',
|
|
463
|
+
question: 'word '.repeat(30),
|
|
464
|
+
context: 'context '.repeat(10),
|
|
465
|
+
}),
|
|
466
|
+
],
|
|
467
|
+
});
|
|
468
|
+
const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
469
|
+
const paneHeight = resolveOpenQuestionsPaneHeight(viewModel.getSnapshot().displayState.openQuestions);
|
|
470
|
+
expect(paneHeight).toBeGreaterThan(OPEN_QUESTIONS_PANE_MIN_HEIGHT);
|
|
471
|
+
expect(lastFrame() ?? '').toContain('context context');
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
describe('orchestration pane scroll (stdin integration)', () => {
|
|
475
|
+
it('scrolls to older lines on PgUp when input is empty and shows scroll hint', async () => {
|
|
476
|
+
const viewModel = createTuiViewModel();
|
|
477
|
+
fillScrollableHarnessLog(viewModel);
|
|
478
|
+
const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
479
|
+
const pinnedFrame = lastFrame() ?? '';
|
|
480
|
+
expect(pinnedFrame).toContain('[harness] line-29');
|
|
481
|
+
expect(pinnedFrame).not.toContain('[harness] line-16');
|
|
482
|
+
expect(pinnedFrame).not.toContain(SCROLL_HINT);
|
|
483
|
+
stdin.write(INK_TEST_KEYS.pageUp);
|
|
484
|
+
await flushInkStdin();
|
|
485
|
+
const scrolledFrame = lastFrame() ?? '';
|
|
486
|
+
expect(scrolledFrame).toContain(SCROLL_HINT);
|
|
487
|
+
expect(scrolledFrame).toContain('[harness] line-16');
|
|
488
|
+
expect(scrolledFrame).not.toContain('[harness] line-29');
|
|
489
|
+
});
|
|
490
|
+
it('returns to latest lines on End and clears scroll hint', async () => {
|
|
491
|
+
const viewModel = createTuiViewModel();
|
|
492
|
+
fillScrollableHarnessLog(viewModel);
|
|
493
|
+
const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
494
|
+
stdin.write(INK_TEST_KEYS.pageUp);
|
|
495
|
+
await flushInkStdin();
|
|
496
|
+
expect(lastFrame() ?? '').toContain(SCROLL_HINT);
|
|
497
|
+
stdin.write(INK_TEST_KEYS.end);
|
|
498
|
+
await flushInkStdin();
|
|
499
|
+
const restoredFrame = lastFrame() ?? '';
|
|
500
|
+
expect(restoredFrame).toContain('[harness] line-29');
|
|
501
|
+
expect(restoredFrame).not.toContain(SCROLL_HINT);
|
|
502
|
+
});
|
|
503
|
+
it('does not scroll on plain PgUp when input has text; Ctrl+PgUp scrolls without changing input', async () => {
|
|
504
|
+
const viewModel = createTuiViewModel();
|
|
505
|
+
fillScrollableHarnessLog(viewModel);
|
|
506
|
+
const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
|
|
507
|
+
stdin.write('typed');
|
|
508
|
+
await flushInkStdin();
|
|
509
|
+
const typedFrame = lastFrame() ?? '';
|
|
510
|
+
expect(typedFrame).toContain('typed');
|
|
511
|
+
expect(typedFrame).toContain('[harness] line-29');
|
|
512
|
+
expect(typedFrame).not.toContain(SCROLL_HINT);
|
|
513
|
+
stdin.write(INK_TEST_KEYS.pageUp);
|
|
514
|
+
await flushInkStdin();
|
|
515
|
+
const plainPageUpFrame = lastFrame() ?? '';
|
|
516
|
+
expect(plainPageUpFrame).toContain('typed');
|
|
517
|
+
expect(plainPageUpFrame).toContain('[harness] line-29');
|
|
518
|
+
expect(plainPageUpFrame).not.toContain(SCROLL_HINT);
|
|
519
|
+
stdin.write(INK_TEST_KEYS.ctrlPageUp);
|
|
520
|
+
await flushInkStdin();
|
|
521
|
+
const ctrlPageUpFrame = lastFrame() ?? '';
|
|
522
|
+
expect(ctrlPageUpFrame).toContain('typed');
|
|
523
|
+
expect(ctrlPageUpFrame).toContain(SCROLL_HINT);
|
|
524
|
+
expect(ctrlPageUpFrame).toContain('[harness] line-16');
|
|
525
|
+
expect(ctrlPageUpFrame).not.toContain('[harness] line-29');
|
|
526
|
+
});
|
|
527
|
+
});
|
|
528
|
+
});
|
|
529
|
+
//# sourceMappingURL=issue-session-tui.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-session-tui.test.js","sourceRoot":"","sources":["../../src/tui/issue-session-tui.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { OpenQuestion } from '@agents-ensemble/core';
|
|
2
|
+
export interface OpenQuestionListItemRender {
|
|
3
|
+
id: string;
|
|
4
|
+
lines: string[];
|
|
5
|
+
isSelected: boolean;
|
|
6
|
+
compact: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface OpenQuestionsPaneLayout {
|
|
9
|
+
paneHeight: number;
|
|
10
|
+
titleLineCount: number;
|
|
11
|
+
titleText: string;
|
|
12
|
+
contentLineCount: number;
|
|
13
|
+
items: OpenQuestionListItemRender[];
|
|
14
|
+
selectedIndex: number;
|
|
15
|
+
}
|
|
16
|
+
/** 端末行数から Open questions 本文の最大表示行数を算出する。 */
|
|
17
|
+
export declare function computeMaxOpenQuestionsDisplayLines(terminalRows: number): number;
|
|
18
|
+
export declare function formatOpenQuestionsPaneTitle(selectedIndex: number, totalCount: number, contentWidth: number): {
|
|
19
|
+
titleText: string;
|
|
20
|
+
titleLineCount: number;
|
|
21
|
+
};
|
|
22
|
+
export declare function buildOpenQuestionListItems(openQuestions: OpenQuestion[], selectedIndex: number, contentWidth: number): OpenQuestionListItemRender[];
|
|
23
|
+
export declare function countOpenQuestionsDisplayLines(items: OpenQuestionListItemRender[]): number;
|
|
24
|
+
export declare function resolveOpenQuestionsPaneLayout(params: {
|
|
25
|
+
openQuestions: OpenQuestion[];
|
|
26
|
+
selectedIndex: number;
|
|
27
|
+
contentWidth: number;
|
|
28
|
+
terminalRows: number;
|
|
29
|
+
}): OpenQuestionsPaneLayout;
|
|
30
|
+
export declare function clampOpenQuestionSelectionIndex(selectedIndex: number, questionCount: number): number;
|
|
31
|
+
export declare function advanceOpenQuestionSelection(selectedIndex: number, direction: 'up' | 'down', questionCount: number): number;
|
|
32
|
+
//# sourceMappingURL=open-questions-pane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-questions-pane.d.ts","sourceRoot":"","sources":["../../src/tui/open-questions-pane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAU1D,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,0BAA0B,EAAE,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,4CAA4C;AAC5C,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAU/C;AAmBD,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,YAAY,EAAE,EAC7B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,0BAA0B,EAAE,CAc9B;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,MAAM,CAE1F;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,uBAAuB,CAuD1B;AAED,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACpB,MAAM,CAKR;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,aAAa,EAAE,MAAM,GACpB,MAAM,CAQR"}
|