@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,111 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { Text, useCursor, useInput } from 'ink';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import stringWidth from 'string-width';
|
|
6
|
+
import { computeOperatorInputLayout, mapCursorOffsetToDisplayPosition, sliceVisibleInputDisplayLines, } from './operator-input-layout.js';
|
|
7
|
+
import { reduceOperatorInputKeyPress } from './operator-input-key-reducer.js';
|
|
8
|
+
function renderInputLine(lineText, cursorOffsetInLine, showCursor, focus, mask, highlightPastedText, cursorWidth) {
|
|
9
|
+
const value = mask ? mask.repeat(lineText.length) : lineText;
|
|
10
|
+
const cursorActualWidth = highlightPastedText ? cursorWidth : 0;
|
|
11
|
+
if (!showCursor || !focus) {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
if (value.length === 0) {
|
|
15
|
+
return chalk.inverse(' ');
|
|
16
|
+
}
|
|
17
|
+
let renderedValue = '';
|
|
18
|
+
let index = 0;
|
|
19
|
+
for (const char of value) {
|
|
20
|
+
renderedValue +=
|
|
21
|
+
index >= cursorOffsetInLine - cursorActualWidth && index <= cursorOffsetInLine
|
|
22
|
+
? chalk.inverse(char)
|
|
23
|
+
: char;
|
|
24
|
+
index++;
|
|
25
|
+
}
|
|
26
|
+
if (cursorOffsetInLine === value.length) {
|
|
27
|
+
renderedValue += chalk.inverse(' ');
|
|
28
|
+
}
|
|
29
|
+
return renderedValue;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `ink-text-input` 相当 + Ink `useCursor` による IME カーソル配置。
|
|
33
|
+
* 上流 [ink-text-input#93](https://github.com/vadimdemedes/ink-text-input/pull/93) 未マージのため自前実装。
|
|
34
|
+
*/
|
|
35
|
+
export function ImeTextInput({ value: originalValue, placeholder = '', focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit, contentWidth, promptPrefix = '', maxDisplayLines, onDisplayLineCountChange, cursorStart, }) {
|
|
36
|
+
const [state, setState] = useState({
|
|
37
|
+
cursorOffset: (originalValue || '').length,
|
|
38
|
+
cursorWidth: 0,
|
|
39
|
+
});
|
|
40
|
+
const { cursorOffset, cursorWidth } = state;
|
|
41
|
+
const { setCursorPosition } = useCursor();
|
|
42
|
+
const promptWidth = stringWidth(promptPrefix);
|
|
43
|
+
const layout = useMemo(() => computeOperatorInputLayout(originalValue, contentWidth, promptWidth), [originalValue, contentWidth, promptWidth]);
|
|
44
|
+
const cursorPosition = useMemo(() => mapCursorOffsetToDisplayPosition(originalValue, cursorOffset, contentWidth, promptWidth), [originalValue, cursorOffset, contentWidth, promptWidth]);
|
|
45
|
+
const { visibleLines, scrollOffset } = useMemo(() => sliceVisibleInputDisplayLines(layout.displayLines, maxDisplayLines, cursorPosition.displayLineIndex), [layout.displayLines, maxDisplayLines, cursorPosition.displayLineIndex]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
onDisplayLineCountChange?.(layout.displayLines.length);
|
|
48
|
+
}, [layout.displayLines.length, onDisplayLineCountChange]);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
setState((previousState) => {
|
|
51
|
+
if (!focus || !showCursor) {
|
|
52
|
+
return previousState;
|
|
53
|
+
}
|
|
54
|
+
const newValue = originalValue || '';
|
|
55
|
+
if (previousState.cursorOffset > newValue.length) {
|
|
56
|
+
return {
|
|
57
|
+
cursorOffset: newValue.length,
|
|
58
|
+
cursorWidth: 0,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return previousState;
|
|
62
|
+
});
|
|
63
|
+
}, [originalValue, focus, showCursor]);
|
|
64
|
+
const visibleCursorLineIndex = cursorPosition.displayLineIndex - scrollOffset;
|
|
65
|
+
const cursorColumnInVisibleLine = cursorPosition.columnInLine;
|
|
66
|
+
if (showCursor && focus && cursorStart !== undefined && visibleCursorLineIndex >= 0) {
|
|
67
|
+
const contentStartX = (cursorStart.x ?? 0) - promptWidth;
|
|
68
|
+
const lineStartX = visibleCursorLineIndex === 0 && scrollOffset === 0 ? (cursorStart.x ?? 0) : contentStartX;
|
|
69
|
+
setCursorPosition({
|
|
70
|
+
x: lineStartX + cursorColumnInVisibleLine,
|
|
71
|
+
y: cursorStart.y + visibleCursorLineIndex,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
setCursorPosition(undefined);
|
|
76
|
+
}
|
|
77
|
+
useInput((input, key) => {
|
|
78
|
+
const action = reduceOperatorInputKeyPress(originalValue, { cursorOffset, cursorWidth }, { input, key }, { contentWidth, promptWidth, showCursor });
|
|
79
|
+
if (action.type === 'ignore') {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (action.type === 'submit') {
|
|
83
|
+
onSubmit?.(originalValue);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const nextCursorOffset = Math.max(0, Math.min(action.cursorOffset ?? cursorOffset, (action.value ?? originalValue).length));
|
|
87
|
+
setState({
|
|
88
|
+
cursorOffset: nextCursorOffset,
|
|
89
|
+
cursorWidth: action.cursorWidth ?? 0,
|
|
90
|
+
});
|
|
91
|
+
if (action.value !== undefined && action.value !== originalValue) {
|
|
92
|
+
onChange(action.value);
|
|
93
|
+
}
|
|
94
|
+
}, { isActive: focus });
|
|
95
|
+
if (originalValue.length === 0 && placeholder && !focus) {
|
|
96
|
+
return _jsx(Text, { children: chalk.grey(placeholder) });
|
|
97
|
+
}
|
|
98
|
+
if (originalValue.length === 0 && placeholder && focus && showCursor) {
|
|
99
|
+
return (_jsxs(Text, { children: [chalk.inverse(placeholder[0] ?? ' '), chalk.grey(placeholder.slice(1))] }));
|
|
100
|
+
}
|
|
101
|
+
return (_jsx(_Fragment, { children: visibleLines.map((lineText, index) => {
|
|
102
|
+
const absoluteLineIndex = scrollOffset + index;
|
|
103
|
+
const isCursorLine = absoluteLineIndex === cursorPosition.displayLineIndex;
|
|
104
|
+
const cursorOffsetInLine = isCursorLine
|
|
105
|
+
? cursorPosition.columnInLine
|
|
106
|
+
: 0;
|
|
107
|
+
const renderedLine = renderInputLine(lineText, isCursorLine ? cursorOffsetInLine : 0, showCursor, focus, mask, highlightPastedText, isCursorLine ? cursorWidth : 0);
|
|
108
|
+
return (_jsxs(Text, { children: [index === 0 && scrollOffset === 0 ? promptPrefix : '', renderedLine] }, `input-line-${absoluteLineIndex}`));
|
|
109
|
+
}) }));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=ime-text-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ime-text-input.js","sourceRoot":"","sources":["../../src/tui/ime-text-input.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,6BAA6B,GAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAyB9E,SAAS,eAAe,CACtB,QAAgB,EAChB,kBAA0B,EAC1B,UAAmB,EACnB,KAAc,EACd,IAAwB,EACxB,mBAA4B,EAC5B,WAAmB;IAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,aAAa;YACX,KAAK,IAAI,kBAAkB,GAAG,iBAAiB,IAAI,KAAK,IAAI,kBAAkB;gBAC5E,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrB,CAAC,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,CAAC;IACV,CAAC;IACD,IAAI,kBAAkB,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACxC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EAAE,aAAa,EACpB,WAAW,GAAG,EAAE,EAChB,KAAK,GAAG,IAAI,EACZ,IAAI,EACJ,mBAAmB,GAAG,KAAK,EAC3B,UAAU,GAAG,IAAI,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,YAAY,GAAG,EAAE,EACjB,eAAe,EACf,wBAAwB,EACxB,WAAW,GACO;IAClB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC;QACjC,YAAY,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM;QAC1C,WAAW,EAAE,CAAC;KACf,CAAC,CAAC;IAEH,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC5C,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,0BAA0B,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,EAC1E,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAC3C,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CACH,gCAAgC,CAC9B,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,CACZ,EACH,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CACzD,CAAC;IAEF,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,CAC5C,GAAG,EAAE,CACH,6BAA6B,CAC3B,MAAM,CAAC,YAAY,EACnB,eAAe,EACf,cAAc,CAAC,gBAAgB,CAChC,EACH,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,CAAC,gBAAgB,CAAC,CACxE,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,CAAC,aAAa,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1B,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,MAAM,QAAQ,GAAG,aAAa,IAAI,EAAE,CAAC;YACrC,IAAI,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO;oBACL,YAAY,EAAE,QAAQ,CAAC,MAAM;oBAC7B,WAAW,EAAE,CAAC;iBACf,CAAC;YACJ,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEvC,MAAM,sBAAsB,GAAG,cAAc,CAAC,gBAAgB,GAAG,YAAY,CAAC;IAC9E,MAAM,yBAAyB,GAAG,cAAc,CAAC,YAAY,CAAC;IAE9D,IAAI,UAAU,IAAI,KAAK,IAAI,WAAW,KAAK,SAAS,IAAI,sBAAsB,IAAI,CAAC,EAAE,CAAC;QACpF,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC;QACzD,MAAM,UAAU,GACd,sBAAsB,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAC5F,iBAAiB,CAAC;YAChB,CAAC,EAAE,UAAU,GAAG,yBAAyB;YACzC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,sBAAsB;SAC1C,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,2BAA2B,CACxC,aAAa,EACb,EAAE,YAAY,EAAE,WAAW,EAAE,EAC7B,EAAE,KAAK,EAAE,GAAG,EAAE,EACd,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAC1C,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,MAAM,CAAC,CACtF,CAAC;QAEF,QAAQ,CAAC;YACP,YAAY,EAAE,gBAAgB;YAC9B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC;QACxD,OAAO,KAAC,IAAI,cAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAQ,CAAC;IAChD,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;QACrE,OAAO,CACL,MAAC,IAAI,eACF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EACpC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAC5B,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,4BACG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACpC,MAAM,iBAAiB,GAAG,YAAY,GAAG,KAAK,CAAC;YAC/C,MAAM,YAAY,GAAG,iBAAiB,KAAK,cAAc,CAAC,gBAAgB,CAAC;YAC3E,MAAM,kBAAkB,GAAG,YAAY;gBACrC,CAAC,CAAC,cAAc,CAAC,YAAY;gBAC7B,CAAC,CAAC,CAAC,CAAC;YACN,MAAM,YAAY,GAAG,eAAe,CAClC,QAAQ,EACR,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EACrC,UAAU,EACV,KAAK,EACL,IAAI,EACJ,mBAAmB,EACnB,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAC;YAEF,OAAO,CACL,MAAC,IAAI,eACF,KAAK,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EACrD,YAAY,KAFJ,cAAc,iBAAiB,EAAE,CAGrC,CACR,CAAC;QACJ,CAAC,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ime-text-input.test.d.ts","sourceRoot":"","sources":["../../src/tui/ime-text-input.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { cleanup, render } from 'ink-testing-library';
|
|
5
|
+
import { ImeTextInput } from './ime-text-input.js';
|
|
6
|
+
import { flushInkStdin, INK_TEST_KEYS } from './ink-test-keys.js';
|
|
7
|
+
import { computeOperatorInputLayout, sliceVisibleInputDisplayLines, } from './operator-input-layout.js';
|
|
8
|
+
function ControlledInput({ initialValue, contentWidth = 30, maxDisplayLines = 5, onValueChange, }) {
|
|
9
|
+
const [value, setValue] = useState(initialValue);
|
|
10
|
+
return (_jsx(ImeTextInput, { value: value, onChange: (nextValue) => {
|
|
11
|
+
setValue(nextValue);
|
|
12
|
+
onValueChange?.(nextValue);
|
|
13
|
+
}, contentWidth: contentWidth, promptPrefix: "", maxDisplayLines: maxDisplayLines }));
|
|
14
|
+
}
|
|
15
|
+
describe('ImeTextInput', () => {
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
cleanup();
|
|
18
|
+
});
|
|
19
|
+
it('moves cursor up across explicit newlines via arrow keys', async () => {
|
|
20
|
+
let latestValue = 'hello\nworld';
|
|
21
|
+
const { stdin } = render(_jsx(ControlledInput, { initialValue: latestValue, onValueChange: (value) => {
|
|
22
|
+
latestValue = value;
|
|
23
|
+
} }));
|
|
24
|
+
stdin.write(INK_TEST_KEYS.upArrow);
|
|
25
|
+
await flushInkStdin();
|
|
26
|
+
stdin.write(INK_TEST_KEYS.home);
|
|
27
|
+
await flushInkStdin();
|
|
28
|
+
stdin.write('X');
|
|
29
|
+
await flushInkStdin();
|
|
30
|
+
expect(latestValue).toBe('Xhello\nworld');
|
|
31
|
+
});
|
|
32
|
+
it('inserts newline with shift+enter', async () => {
|
|
33
|
+
let latestValue = 'helloworld';
|
|
34
|
+
const { stdin } = render(_jsx(ControlledInput, { initialValue: latestValue, onValueChange: (value) => {
|
|
35
|
+
latestValue = value;
|
|
36
|
+
} }));
|
|
37
|
+
for (let index = 0; index < 5; index++) {
|
|
38
|
+
stdin.write(INK_TEST_KEYS.leftArrow);
|
|
39
|
+
await flushInkStdin();
|
|
40
|
+
}
|
|
41
|
+
stdin.write(INK_TEST_KEYS.shiftEnter);
|
|
42
|
+
await flushInkStdin();
|
|
43
|
+
expect(latestValue).toBe('hello\nworld');
|
|
44
|
+
});
|
|
45
|
+
it('keeps cursor line visible when scrolling past maxDisplayLines', async () => {
|
|
46
|
+
const contentWidth = 10;
|
|
47
|
+
const promptWidth = 0;
|
|
48
|
+
const longValue = 'line\n'.repeat(8).trimEnd();
|
|
49
|
+
const layout = computeOperatorInputLayout(longValue, contentWidth, promptWidth);
|
|
50
|
+
const maxDisplayLines = 3;
|
|
51
|
+
const cursorLine = layout.displayLines.length - 1;
|
|
52
|
+
const { scrollOffset } = sliceVisibleInputDisplayLines(layout.displayLines, maxDisplayLines, cursorLine);
|
|
53
|
+
expect(scrollOffset).toBeGreaterThan(0);
|
|
54
|
+
expect(cursorLine).toBeLessThan(scrollOffset + maxDisplayLines);
|
|
55
|
+
const { stdin } = render(_jsx(ControlledInput, { initialValue: longValue, contentWidth: contentWidth, maxDisplayLines: maxDisplayLines }));
|
|
56
|
+
stdin.write(INK_TEST_KEYS.home);
|
|
57
|
+
await flushInkStdin();
|
|
58
|
+
const { scrollOffset: topScroll } = sliceVisibleInputDisplayLines(layout.displayLines, maxDisplayLines, 0);
|
|
59
|
+
expect(topScroll).toBe(0);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=ime-text-input.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ime-text-input.test.js","sourceRoot":"","sources":["../../src/tui/ime-text-input.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** ink-testing-library 向けの端末キー入力シーケンス(Ink `parseKeypress` 互換)。 */
|
|
2
|
+
export declare const INK_TEST_KEYS: {
|
|
3
|
+
readonly pageUp: "\u001B[5~";
|
|
4
|
+
readonly pageDown: "\u001B[6~";
|
|
5
|
+
readonly end: "\u001B[F";
|
|
6
|
+
readonly home: "\u001B[H";
|
|
7
|
+
readonly leftArrow: "\u001B[D";
|
|
8
|
+
readonly rightArrow: "\u001B[C";
|
|
9
|
+
readonly upArrow: "\u001B[A";
|
|
10
|
+
readonly downArrow: "\u001B[B";
|
|
11
|
+
/** Kitty keyboard protocol: Shift+Enter */
|
|
12
|
+
readonly shiftEnter: "\u001B[13;2u";
|
|
13
|
+
/** xterm: Ctrl+PageUp */
|
|
14
|
+
readonly ctrlPageUp: "\u001B[5;5~";
|
|
15
|
+
/** xterm: Shift+Up */
|
|
16
|
+
readonly shiftUpArrow: "\u001B[1;2A";
|
|
17
|
+
/** xterm: Shift+Down */
|
|
18
|
+
readonly shiftDownArrow: "\u001B[1;2B";
|
|
19
|
+
};
|
|
20
|
+
/** `stdin.write` 後に Ink の readable → useInput まで進める。 */
|
|
21
|
+
export declare function flushInkStdin(): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=ink-test-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ink-test-keys.d.ts","sourceRoot":"","sources":["../../src/tui/ink-test-keys.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,aAAa;;;;;;;;;IASxB,2CAA2C;;IAE3C,yBAAyB;;IAEzB,sBAAsB;;IAEtB,wBAAwB;;CAEhB,CAAC;AAEX,wDAAwD;AACxD,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAInD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** ink-testing-library 向けの端末キー入力シーケンス(Ink `parseKeypress` 互換)。 */
|
|
2
|
+
export const INK_TEST_KEYS = {
|
|
3
|
+
pageUp: '\u001B[5~',
|
|
4
|
+
pageDown: '\u001B[6~',
|
|
5
|
+
end: '\u001B[F',
|
|
6
|
+
home: '\u001B[H',
|
|
7
|
+
leftArrow: '\u001B[D',
|
|
8
|
+
rightArrow: '\u001B[C',
|
|
9
|
+
upArrow: '\u001B[A',
|
|
10
|
+
downArrow: '\u001B[B',
|
|
11
|
+
/** Kitty keyboard protocol: Shift+Enter */
|
|
12
|
+
shiftEnter: '\u001B[13;2u',
|
|
13
|
+
/** xterm: Ctrl+PageUp */
|
|
14
|
+
ctrlPageUp: '\u001B[5;5~',
|
|
15
|
+
/** xterm: Shift+Up */
|
|
16
|
+
shiftUpArrow: '\u001B[1;2A',
|
|
17
|
+
/** xterm: Shift+Down */
|
|
18
|
+
shiftDownArrow: '\u001B[1;2B',
|
|
19
|
+
};
|
|
20
|
+
/** `stdin.write` 後に Ink の readable → useInput まで進める。 */
|
|
21
|
+
export async function flushInkStdin() {
|
|
22
|
+
await new Promise((resolve) => {
|
|
23
|
+
setImmediate(resolve);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ink-test-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ink-test-keys.js","sourceRoot":"","sources":["../../src/tui/ink-test-keys.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,WAAW;IACrB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,UAAU;IACtB,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,UAAU;IACrB,2CAA2C;IAC3C,UAAU,EAAE,cAAc;IAC1B,yBAAyB;IACzB,UAAU,EAAE,aAAa;IACzB,sBAAsB;IACtB,YAAY,EAAE,aAAa;IAC3B,wBAAwB;IACxB,cAAc,EAAE,aAAa;CACrB,CAAC;AAEX,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TuiViewModel } from './tui-view-model.js';
|
|
2
|
+
import type { OperatorInputSubmitOptions } from '@agents-ensemble/core';
|
|
3
|
+
export interface IssueSessionTuiProps {
|
|
4
|
+
viewModel: TuiViewModel;
|
|
5
|
+
onSubmit: (text: string, options?: OperatorInputSubmitOptions) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function IssueSessionTui({ viewModel, onSubmit }: IssueSessionTuiProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=issue-session-tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-session-tui.d.ts","sourceRoot":"","sources":["../../src/tui/issue-session-tui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AAazE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AA4BxE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B,KAAK,IAAI,CAAC;CACxE;AA2ND,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAqL5E"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useBoxMetrics, useInput } from 'ink';
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
|
4
|
+
import { formatOperatorContextHint } from './format-operator-context.js';
|
|
5
|
+
import { ACTIVITY_LOG_LABEL_COLORS, advanceActivityLogScrollOffset, buildActivityLogDisplayLines, sliceActivityLogDisplayLines, } from './activity-log.js';
|
|
6
|
+
import { advanceOpenQuestionSelection, clampOpenQuestionSelectionIndex, resolveOpenQuestionsPaneLayout, } from './open-questions-pane.js';
|
|
7
|
+
import { MAIN_PANE_TITLE, ORCHESTRATION_PANE_TITLE_ROWS, PANE_PADDING_X, ROUND_BORDER_WIDTH, WORKER_PANE_HEIGHT, } from './tui-layout-constants.js';
|
|
8
|
+
import { ImeTextInput } from './ime-text-input.js';
|
|
9
|
+
import { computeActivityPaneHeight, computeInputPaneHeight, computeOperatorInputCursorX, computeOperatorInputCursorY, computeOrchestrationLogVisibleLineCount, } from './compute-operator-input-cursor-y.js';
|
|
10
|
+
import { computeMaxInputDisplayLines, trimBlankLinesOnly, } from './operator-input-layout.js';
|
|
11
|
+
import { getPaneContentWidth, wrapTextToWidth } from './wrap-text-to-width.js';
|
|
12
|
+
function usePaneContentWidth() {
|
|
13
|
+
return getPaneContentWidth({
|
|
14
|
+
columns: process.stdout.columns ?? 80,
|
|
15
|
+
paddingX: PANE_PADDING_X,
|
|
16
|
+
borderWidth: ROUND_BORDER_WIDTH,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function WrappedTextLines({ text, width, dimColor = false, }) {
|
|
20
|
+
const lines = wrapTextToWidth(text, width);
|
|
21
|
+
return (_jsx(_Fragment, { children: lines.map((line, index) => (_jsx(Text, { dimColor: dimColor, children: line }, `${index}-${line}`))) }));
|
|
22
|
+
}
|
|
23
|
+
function renderActivityLogLabel(label) {
|
|
24
|
+
if (label === 'harness') {
|
|
25
|
+
return (_jsxs(Text, { color: "yellow", dimColor: true, children: ["[", label, "]"] }));
|
|
26
|
+
}
|
|
27
|
+
const color = ACTIVITY_LOG_LABEL_COLORS[label];
|
|
28
|
+
return color ? _jsxs(Text, { color: color, children: ["[", label, "]"] }) : _jsxs(Text, { children: ["[", label, "]"] });
|
|
29
|
+
}
|
|
30
|
+
function ActivityLogDisplayLineRow({ line }) {
|
|
31
|
+
if (line.layout === 'separator') {
|
|
32
|
+
return _jsx(Text, { children: " " });
|
|
33
|
+
}
|
|
34
|
+
if (line.layout === 'body-row') {
|
|
35
|
+
return _jsx(Text, { children: line.text });
|
|
36
|
+
}
|
|
37
|
+
if (line.layout === 'label-row') {
|
|
38
|
+
if (line.label === 'separator') {
|
|
39
|
+
return _jsx(Text, { children: " " });
|
|
40
|
+
}
|
|
41
|
+
return _jsx(Text, { children: renderActivityLogLabel(line.label) });
|
|
42
|
+
}
|
|
43
|
+
if (line.label === 'separator') {
|
|
44
|
+
return _jsx(Text, { children: " " });
|
|
45
|
+
}
|
|
46
|
+
return (_jsxs(Text, { children: [renderActivityLogLabel(line.label), _jsxs(Text, { children: [" ", line.text] })] }));
|
|
47
|
+
}
|
|
48
|
+
function formatConductorWorkerStatusLine(name, worker) {
|
|
49
|
+
if (worker.kind === 'conductor') {
|
|
50
|
+
const label = worker.status === 'running' ? 'thinking' : worker.status;
|
|
51
|
+
return `conductor: ${label}`;
|
|
52
|
+
}
|
|
53
|
+
return `${name} (${worker.kind}): ${worker.status}`;
|
|
54
|
+
}
|
|
55
|
+
function sortWorkerEntries(entries) {
|
|
56
|
+
return [...entries].sort(([nameA], [nameB]) => {
|
|
57
|
+
if (nameA === 'conductor') {
|
|
58
|
+
return -1;
|
|
59
|
+
}
|
|
60
|
+
if (nameB === 'conductor') {
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
63
|
+
return nameA.localeCompare(nameB);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function WorkerStatusPane({ workers, }) {
|
|
67
|
+
const entries = sortWorkerEntries(Object.entries(workers));
|
|
68
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, height: WORKER_PANE_HEIGHT, overflow: "hidden", children: [_jsx(Text, { bold: true, children: "Workers" }), entries.length === 0 ? (_jsx(Text, { dimColor: true, children: "(\u5F85\u6A5F\u4E2D)" })) : (entries.map(([name, worker]) => (_jsx(Text, { children: formatConductorWorkerStatusLine(name, worker) }, name))))] }));
|
|
69
|
+
}
|
|
70
|
+
function getOrchestrationTitleLineCount(scrollHint, contentWidth) {
|
|
71
|
+
return wrapTextToWidth(`${MAIN_PANE_TITLE}${scrollHint}`, contentWidth).length;
|
|
72
|
+
}
|
|
73
|
+
function OrchestrationPane({ activityLog, contentWidth, paneHeight, linesFromBottom, }) {
|
|
74
|
+
const logAreaRef = useRef(null);
|
|
75
|
+
const { height: measuredLogAreaHeight, hasMeasured } = useBoxMetrics(logAreaRef);
|
|
76
|
+
const pinnedToBottom = linesFromBottom === 0;
|
|
77
|
+
const scrollHint = pinnedToBottom
|
|
78
|
+
? ''
|
|
79
|
+
: ' (PgUp/PgDn でスクロール · 最新へは End · 入力中は Ctrl+PgUp/PgDn)';
|
|
80
|
+
const titleLineCount = getOrchestrationTitleLineCount(scrollHint, contentWidth);
|
|
81
|
+
const estimatedLogLineCount = computeOrchestrationLogVisibleLineCount(paneHeight, titleLineCount);
|
|
82
|
+
const visibleCount = hasMeasured && measuredLogAreaHeight > 0
|
|
83
|
+
? Math.max(1, Math.floor(measuredLogAreaHeight))
|
|
84
|
+
: estimatedLogLineCount;
|
|
85
|
+
const displayLines = useMemo(() => buildActivityLogDisplayLines(activityLog, contentWidth), [activityLog, contentWidth]);
|
|
86
|
+
const visibleLines = sliceActivityLogDisplayLines(displayLines, visibleCount, linesFromBottom);
|
|
87
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "green", paddingX: PANE_PADDING_X, height: paneHeight, overflow: "hidden", children: [_jsxs(Text, { bold: true, children: [MAIN_PANE_TITLE, scrollHint] }), _jsx(Box, { ref: logAreaRef, flexGrow: 1, flexDirection: "column", overflow: "hidden", children: activityLog.length === 0 ? (_jsx(Text, { dimColor: true, children: "(\u6D3B\u52D5\u30ED\u30B0\u306A\u3057)" })) : (visibleLines.map((line, index) => (_jsx(ActivityLogDisplayLineRow, { line: line }, `log-line-${index}`)))) })] }));
|
|
88
|
+
}
|
|
89
|
+
function OpenQuestionsPane({ layout }) {
|
|
90
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: PANE_PADDING_X, height: layout.paneHeight, overflow: "hidden", children: [_jsx(Text, { bold: true, children: layout.titleText }), layout.items.length === 0 ? (_jsx(Text, { dimColor: true, children: "(\u672A\u56DE\u7B54\u306A\u3057)" })) : (layout.items.flatMap((item) => item.lines.map((line, lineIndex) => (_jsx(Text, { dimColor: item.compact && !item.isSelected, children: line }, `${item.id}-${lineIndex}`)))))] }));
|
|
91
|
+
}
|
|
92
|
+
export function IssueSessionTui({ viewModel, onSubmit }) {
|
|
93
|
+
const snapshot = useSyncExternalStore(viewModel.subscribe, viewModel.getSnapshot, viewModel.getSnapshot);
|
|
94
|
+
const [inputValue, setInputValue] = useState('');
|
|
95
|
+
const [inputDisplayLineCount, setInputDisplayLineCount] = useState(1);
|
|
96
|
+
const [linesFromBottom, setLinesFromBottom] = useState(0);
|
|
97
|
+
const [selectedQuestionIndex, setSelectedQuestionIndex] = useState(0);
|
|
98
|
+
const contentWidth = usePaneContentWidth();
|
|
99
|
+
const terminalRows = process.stdout.rows ?? 24;
|
|
100
|
+
const operatorPrompt = 'operator> ';
|
|
101
|
+
const maxInputDisplayLines = computeMaxInputDisplayLines(terminalRows);
|
|
102
|
+
const openQuestions = snapshot.displayState.openQuestions;
|
|
103
|
+
const openQuestionsLayout = useMemo(() => resolveOpenQuestionsPaneLayout({
|
|
104
|
+
openQuestions,
|
|
105
|
+
selectedIndex: selectedQuestionIndex,
|
|
106
|
+
contentWidth,
|
|
107
|
+
terminalRows,
|
|
108
|
+
}), [openQuestions, selectedQuestionIndex, contentWidth, terminalRows]);
|
|
109
|
+
const selectedQuestion = openQuestions[openQuestionsLayout.selectedIndex];
|
|
110
|
+
const contextHint = snapshot.postLoopWaiting
|
|
111
|
+
? 'post-loop 待機中 — 追加指示を入力するか /exit で終了'
|
|
112
|
+
: formatOperatorContextHint(snapshot.operatorContext, selectedQuestion
|
|
113
|
+
? {
|
|
114
|
+
id: selectedQuestion.id,
|
|
115
|
+
index: openQuestionsLayout.selectedIndex,
|
|
116
|
+
total: openQuestions.length,
|
|
117
|
+
}
|
|
118
|
+
: undefined);
|
|
119
|
+
const hintLineCount = wrapTextToWidth(contextHint, contentWidth).length;
|
|
120
|
+
const visibleInputDisplayLineCount = Math.min(inputDisplayLineCount, maxInputDisplayLines);
|
|
121
|
+
const inputPaneHeight = computeInputPaneHeight({
|
|
122
|
+
hintLineCount,
|
|
123
|
+
inputDisplayLineCount: visibleInputDisplayLineCount,
|
|
124
|
+
});
|
|
125
|
+
const activityPaneHeight = computeActivityPaneHeight({
|
|
126
|
+
terminalRows,
|
|
127
|
+
hintLineCount,
|
|
128
|
+
inputDisplayLineCount: visibleInputDisplayLineCount,
|
|
129
|
+
openQuestionsPaneHeight: openQuestionsLayout.paneHeight,
|
|
130
|
+
});
|
|
131
|
+
const visibleLineCount = computeOrchestrationLogVisibleLineCount(activityPaneHeight, ORCHESTRATION_PANE_TITLE_ROWS);
|
|
132
|
+
const displayLineCount = useMemo(() => buildActivityLogDisplayLines(snapshot.activityLog, contentWidth).length, [snapshot.activityLog, contentWidth]);
|
|
133
|
+
const maxLinesFromBottom = Math.max(0, displayLineCount - visibleLineCount);
|
|
134
|
+
const cursorStart = {
|
|
135
|
+
x: computeOperatorInputCursorX(operatorPrompt),
|
|
136
|
+
y: computeOperatorInputCursorY({
|
|
137
|
+
terminalRows,
|
|
138
|
+
hintLineCount,
|
|
139
|
+
inputDisplayLineCount: visibleInputDisplayLineCount,
|
|
140
|
+
openQuestionsPaneHeight: openQuestionsLayout.paneHeight,
|
|
141
|
+
cursorLineOffset: 0,
|
|
142
|
+
}),
|
|
143
|
+
};
|
|
144
|
+
const handleDisplayLineCountChange = useCallback((lineCount) => {
|
|
145
|
+
setInputDisplayLineCount(Math.max(1, lineCount));
|
|
146
|
+
}, []);
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
setLinesFromBottom((current) => Math.min(current, maxLinesFromBottom));
|
|
149
|
+
}, [maxLinesFromBottom]);
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
setSelectedQuestionIndex((current) => clampOpenQuestionSelectionIndex(current, openQuestions.length));
|
|
152
|
+
}, [openQuestions]);
|
|
153
|
+
const applyScrollAction = (action) => {
|
|
154
|
+
setLinesFromBottom((current) => advanceActivityLogScrollOffset(current, action, visibleLineCount, maxLinesFromBottom));
|
|
155
|
+
};
|
|
156
|
+
useInput((_input, key) => {
|
|
157
|
+
if (openQuestions.length > 0 && key.shift) {
|
|
158
|
+
if (key.upArrow) {
|
|
159
|
+
setSelectedQuestionIndex((current) => advanceOpenQuestionSelection(current, 'up', openQuestions.length));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (key.downArrow) {
|
|
163
|
+
setSelectedQuestionIndex((current) => advanceOpenQuestionSelection(current, 'down', openQuestions.length));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const scrollWithModifier = key.ctrl;
|
|
168
|
+
const scrollWithoutModifier = inputValue.length === 0;
|
|
169
|
+
if (!scrollWithModifier && !scrollWithoutModifier) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (key.pageUp) {
|
|
173
|
+
applyScrollAction('pageUp');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (key.pageDown) {
|
|
177
|
+
applyScrollAction('pageDown');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (key.home) {
|
|
181
|
+
applyScrollAction('home');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (key.end) {
|
|
185
|
+
applyScrollAction('end');
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
const handleSubmit = (value) => {
|
|
189
|
+
const trimmed = trimBlankLinesOnly(value);
|
|
190
|
+
if (!trimmed) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
onSubmit(trimmed, selectedQuestion && openQuestions.length > 0
|
|
194
|
+
? { targetOpenQuestionId: selectedQuestion.id }
|
|
195
|
+
: undefined);
|
|
196
|
+
setInputValue('');
|
|
197
|
+
setInputDisplayLineCount(1);
|
|
198
|
+
};
|
|
199
|
+
return (_jsxs(Box, { flexDirection: "column", height: terminalRows, children: [_jsx(WorkerStatusPane, { workers: snapshot.displayState.workers }), _jsx(OrchestrationPane, { activityLog: snapshot.activityLog, contentWidth: contentWidth, paneHeight: activityPaneHeight, linesFromBottom: linesFromBottom }), _jsx(OpenQuestionsPane, { layout: openQuestionsLayout }), _jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "white", paddingX: 1, height: inputPaneHeight, overflow: "hidden", children: [_jsx(WrappedTextLines, { text: contextHint, width: contentWidth, dimColor: true }), _jsx(ImeTextInput, { value: inputValue, onChange: setInputValue, onSubmit: handleSubmit, contentWidth: contentWidth, promptPrefix: operatorPrompt, maxDisplayLines: maxInputDisplayLines, onDisplayLineCountChange: handleDisplayLineCountChange, cursorStart: cursorStart })] })] }));
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=issue-session-tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-session-tui.js","sourceRoot":"","sources":["../../src/tui/issue-session-tui.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-session-tui.test.d.ts","sourceRoot":"","sources":["../../src/tui/issue-session-tui.test.tsx"],"names":[],"mappings":""}
|