@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.
Files changed (149) hide show
  1. package/dist/async-operator-input.d.ts +6 -0
  2. package/dist/async-operator-input.d.ts.map +1 -0
  3. package/dist/async-operator-input.js +58 -0
  4. package/dist/async-operator-input.js.map +1 -0
  5. package/dist/display/create-session-display-sink.d.ts +9 -0
  6. package/dist/display/create-session-display-sink.d.ts.map +1 -0
  7. package/dist/display/create-session-display-sink.js +31 -0
  8. package/dist/display/create-session-display-sink.js.map +1 -0
  9. package/dist/display/select-session-display-backend.d.ts +11 -0
  10. package/dist/display/select-session-display-backend.d.ts.map +1 -0
  11. package/dist/display/select-session-display-backend.js +16 -0
  12. package/dist/display/select-session-display-backend.js.map +1 -0
  13. package/dist/display/session-display-backend.d.ts +7 -0
  14. package/dist/display/session-display-backend.d.ts.map +1 -0
  15. package/dist/display/session-display-backend.js +2 -0
  16. package/dist/display/session-display-backend.js.map +1 -0
  17. package/dist/display/session-display-reducer.d.ts +6 -0
  18. package/dist/display/session-display-reducer.d.ts.map +1 -0
  19. package/dist/display/session-display-reducer.js +74 -0
  20. package/dist/display/session-display-reducer.js.map +1 -0
  21. package/dist/display/session-display-state.d.ts +14 -0
  22. package/dist/display/session-display-state.d.ts.map +1 -0
  23. package/dist/display/session-display-state.js +6 -0
  24. package/dist/display/session-display-state.js.map +1 -0
  25. package/dist/display/string-session-display-backend.d.ts +8 -0
  26. package/dist/display/string-session-display-backend.d.ts.map +1 -0
  27. package/dist/display/string-session-display-backend.js +18 -0
  28. package/dist/display/string-session-display-backend.js.map +1 -0
  29. package/dist/display/stub-session-display-backend.d.ts +15 -0
  30. package/dist/display/stub-session-display-backend.d.ts.map +1 -0
  31. package/dist/display/stub-session-display-backend.js +17 -0
  32. package/dist/display/stub-session-display-backend.js.map +1 -0
  33. package/dist/format-models-list.d.ts +9 -0
  34. package/dist/format-models-list.d.ts.map +1 -0
  35. package/dist/format-models-list.js +17 -0
  36. package/dist/format-models-list.js.map +1 -0
  37. package/dist/format-session-summary.d.ts +4 -0
  38. package/dist/format-session-summary.d.ts.map +1 -0
  39. package/dist/format-session-summary.js +25 -0
  40. package/dist/format-session-summary.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +124 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/issue-command.d.ts +38 -0
  46. package/dist/issue-command.d.ts.map +1 -0
  47. package/dist/issue-command.js +117 -0
  48. package/dist/issue-command.js.map +1 -0
  49. package/dist/parse-worktree-mode.d.ts +4 -0
  50. package/dist/parse-worktree-mode.d.ts.map +1 -0
  51. package/dist/parse-worktree-mode.js +10 -0
  52. package/dist/parse-worktree-mode.js.map +1 -0
  53. package/dist/prompt-human-inquiry.d.ts +3 -0
  54. package/dist/prompt-human-inquiry.d.ts.map +1 -0
  55. package/dist/prompt-human-inquiry.js +29 -0
  56. package/dist/prompt-human-inquiry.js.map +1 -0
  57. package/dist/prompt-operator-input.d.ts +7 -0
  58. package/dist/prompt-operator-input.d.ts.map +1 -0
  59. package/dist/prompt-operator-input.js +51 -0
  60. package/dist/prompt-operator-input.js.map +1 -0
  61. package/dist/prompt-permission.d.ts +4 -0
  62. package/dist/prompt-permission.d.ts.map +1 -0
  63. package/dist/prompt-permission.js +8 -0
  64. package/dist/prompt-permission.js.map +1 -0
  65. package/dist/resolve-cli-max-turns.d.ts +8 -0
  66. package/dist/resolve-cli-max-turns.d.ts.map +1 -0
  67. package/dist/resolve-cli-max-turns.js +13 -0
  68. package/dist/resolve-cli-max-turns.js.map +1 -0
  69. package/dist/session-log-lines.d.ts +10 -0
  70. package/dist/session-log-lines.d.ts.map +1 -0
  71. package/dist/session-log-lines.js +121 -0
  72. package/dist/session-log-lines.js.map +1 -0
  73. package/dist/session-sinks.d.ts +20 -0
  74. package/dist/session-sinks.d.ts.map +1 -0
  75. package/dist/session-sinks.js +67 -0
  76. package/dist/session-sinks.js.map +1 -0
  77. package/dist/tui/activity-log.d.ts +32 -0
  78. package/dist/tui/activity-log.d.ts.map +1 -0
  79. package/dist/tui/activity-log.js +79 -0
  80. package/dist/tui/activity-log.js.map +1 -0
  81. package/dist/tui/compute-operator-input-cursor-y.d.ts +48 -0
  82. package/dist/tui/compute-operator-input-cursor-y.d.ts.map +1 -0
  83. package/dist/tui/compute-operator-input-cursor-y.js +52 -0
  84. package/dist/tui/compute-operator-input-cursor-y.js.map +1 -0
  85. package/dist/tui/create-issue-session-tui-host.d.ts +12 -0
  86. package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -0
  87. package/dist/tui/create-issue-session-tui-host.js +88 -0
  88. package/dist/tui/create-issue-session-tui-host.js.map +1 -0
  89. package/dist/tui/create-issue-session-tui-host.test.d.ts +2 -0
  90. package/dist/tui/create-issue-session-tui-host.test.d.ts.map +1 -0
  91. package/dist/tui/create-issue-session-tui-host.test.js +133 -0
  92. package/dist/tui/create-issue-session-tui-host.test.js.map +1 -0
  93. package/dist/tui/create-tui-telemetry-sink.d.ts +5 -0
  94. package/dist/tui/create-tui-telemetry-sink.d.ts.map +1 -0
  95. package/dist/tui/create-tui-telemetry-sink.js +18 -0
  96. package/dist/tui/create-tui-telemetry-sink.js.map +1 -0
  97. package/dist/tui/format-operator-context.d.ts +9 -0
  98. package/dist/tui/format-operator-context.d.ts.map +1 -0
  99. package/dist/tui/format-operator-context.js +17 -0
  100. package/dist/tui/format-operator-context.js.map +1 -0
  101. package/dist/tui/ime-text-input.d.ts +31 -0
  102. package/dist/tui/ime-text-input.d.ts.map +1 -0
  103. package/dist/tui/ime-text-input.js +111 -0
  104. package/dist/tui/ime-text-input.js.map +1 -0
  105. package/dist/tui/ime-text-input.test.d.ts +2 -0
  106. package/dist/tui/ime-text-input.test.d.ts.map +1 -0
  107. package/dist/tui/ime-text-input.test.js +62 -0
  108. package/dist/tui/ime-text-input.test.js.map +1 -0
  109. package/dist/tui/ink-test-keys.d.ts +22 -0
  110. package/dist/tui/ink-test-keys.d.ts.map +1 -0
  111. package/dist/tui/ink-test-keys.js +26 -0
  112. package/dist/tui/ink-test-keys.js.map +1 -0
  113. package/dist/tui/issue-session-tui.d.ts +8 -0
  114. package/dist/tui/issue-session-tui.d.ts.map +1 -0
  115. package/dist/tui/issue-session-tui.js +201 -0
  116. package/dist/tui/issue-session-tui.js.map +1 -0
  117. package/dist/tui/issue-session-tui.test.d.ts +2 -0
  118. package/dist/tui/issue-session-tui.test.d.ts.map +1 -0
  119. package/dist/tui/issue-session-tui.test.js +529 -0
  120. package/dist/tui/issue-session-tui.test.js.map +1 -0
  121. package/dist/tui/open-questions-pane.d.ts +32 -0
  122. package/dist/tui/open-questions-pane.d.ts.map +1 -0
  123. package/dist/tui/open-questions-pane.js +101 -0
  124. package/dist/tui/open-questions-pane.js.map +1 -0
  125. package/dist/tui/operator-input-key-reducer.d.ts +36 -0
  126. package/dist/tui/operator-input-key-reducer.d.ts.map +1 -0
  127. package/dist/tui/operator-input-key-reducer.js +141 -0
  128. package/dist/tui/operator-input-key-reducer.js.map +1 -0
  129. package/dist/tui/operator-input-layout.d.ts +29 -0
  130. package/dist/tui/operator-input-layout.d.ts.map +1 -0
  131. package/dist/tui/operator-input-layout.js +120 -0
  132. package/dist/tui/operator-input-layout.js.map +1 -0
  133. package/dist/tui/orchestration-pane-frame.d.ts +9 -0
  134. package/dist/tui/orchestration-pane-frame.d.ts.map +1 -0
  135. package/dist/tui/orchestration-pane-frame.js +27 -0
  136. package/dist/tui/orchestration-pane-frame.js.map +1 -0
  137. package/dist/tui/tui-layout-constants.d.ts +48 -0
  138. package/dist/tui/tui-layout-constants.d.ts.map +1 -0
  139. package/dist/tui/tui-layout-constants.js +48 -0
  140. package/dist/tui/tui-layout-constants.js.map +1 -0
  141. package/dist/tui/tui-view-model.d.ts +20 -0
  142. package/dist/tui/tui-view-model.d.ts.map +1 -0
  143. package/dist/tui/tui-view-model.js +69 -0
  144. package/dist/tui/tui-view-model.js.map +1 -0
  145. package/dist/tui/wrap-text-to-width.d.ts +14 -0
  146. package/dist/tui/wrap-text-to-width.d.ts.map +1 -0
  147. package/dist/tui/wrap-text-to-width.js +55 -0
  148. package/dist/tui/wrap-text-to-width.js.map +1 -0
  149. 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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ime-text-input.test.d.ts.map
@@ -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":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,4BAA4B,CAAC;AAEpC,SAAS,eAAe,CAAC,EACvB,YAAY,EACZ,YAAY,GAAG,EAAE,EACjB,eAAe,GAAG,CAAC,EACnB,aAAa,GAMd;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE;YACtB,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC,EACD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAC,EAAE,EACf,eAAe,EAAE,eAAe,GAChC,CACH,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,IAAI,WAAW,GAAG,cAAc,CAAC;QACjC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CACtB,KAAC,eAAe,IACd,YAAY,EAAE,WAAW,EACzB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC,GACD,CACH,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,aAAa,EAAE,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,aAAa,EAAE,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,aAAa,EAAE,CAAC;QAEtB,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,IAAI,WAAW,GAAG,YAAY,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CACtB,KAAC,eAAe,IACd,YAAY,EAAE,WAAW,EACzB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC,GACD,CACH,CAAC;QAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,aAAa,EAAE,CAAC;QAEtB,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAChF,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,6BAA6B,CACpD,MAAM,CAAC,YAAY,EACnB,eAAe,EACf,UAAU,CACX,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,YAAY,GAAG,eAAe,CAAC,CAAC;QAEhE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CACtB,KAAC,eAAe,IACd,YAAY,EAAE,SAAS,EACvB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,GAChC,CACH,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,aAAa,EAAE,CAAC;QAEtB,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,6BAA6B,CAC/D,MAAM,CAAC,YAAY,EACnB,eAAe,EACf,CAAC,CACF,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=issue-session-tui.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-session-tui.test.d.ts","sourceRoot":"","sources":["../../src/tui/issue-session-tui.test.tsx"],"names":[],"mappings":""}