@agents-ensemble/cli 0.5.3 → 0.6.1
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/README.md +67 -0
- package/config.example.yaml +46 -0
- package/dist/async-operator-input.d.ts +1 -0
- package/dist/async-operator-input.d.ts.map +1 -1
- package/dist/async-operator-input.js +4 -4
- package/dist/async-operator-input.js.map +1 -1
- package/dist/display/create-session-display-sink.d.ts.map +1 -1
- package/dist/display/create-session-display-sink.js +1 -0
- package/dist/display/create-session-display-sink.js.map +1 -1
- package/dist/display/session-display-reducer.d.ts.map +1 -1
- package/dist/display/session-display-reducer.js +11 -0
- package/dist/display/session-display-reducer.js.map +1 -1
- package/dist/display/session-display-state.d.ts +5 -0
- package/dist/display/session-display-state.d.ts.map +1 -1
- package/dist/display/session-display-state.js +4 -0
- package/dist/display/session-display-state.js.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/issue-command.d.ts +3 -0
- package/dist/issue-command.d.ts.map +1 -1
- package/dist/issue-command.js +34 -5
- package/dist/issue-command.js.map +1 -1
- package/dist/operator-message.d.ts +6 -0
- package/dist/operator-message.d.ts.map +1 -0
- package/dist/operator-message.js +17 -0
- package/dist/operator-message.js.map +1 -0
- package/dist/prompt-operator-input.d.ts +2 -2
- package/dist/prompt-operator-input.d.ts.map +1 -1
- package/dist/prompt-operator-input.js +5 -5
- package/dist/prompt-operator-input.js.map +1 -1
- package/dist/session-log-lines.d.ts.map +1 -1
- package/dist/session-log-lines.js +12 -4
- package/dist/session-log-lines.js.map +1 -1
- package/dist/session-sinks.d.ts.map +1 -1
- package/dist/session-sinks.js +1 -0
- package/dist/session-sinks.js.map +1 -1
- package/dist/tui/compute-operator-input-cursor-y.d.ts +14 -0
- package/dist/tui/compute-operator-input-cursor-y.d.ts.map +1 -1
- package/dist/tui/compute-operator-input-cursor-y.js +17 -0
- package/dist/tui/compute-operator-input-cursor-y.js.map +1 -1
- package/dist/tui/create-issue-session-tui-host.d.ts +7 -2
- package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -1
- package/dist/tui/create-issue-session-tui-host.js +29 -11
- package/dist/tui/create-issue-session-tui-host.js.map +1 -1
- package/dist/tui/create-issue-session-tui-host.test.js +142 -1
- package/dist/tui/create-issue-session-tui-host.test.js.map +1 -1
- package/dist/tui/create-tui-telemetry-sink.d.ts +1 -1
- package/dist/tui/create-tui-telemetry-sink.d.ts.map +1 -1
- package/dist/tui/create-tui-telemetry-sink.js +5 -5
- package/dist/tui/create-tui-telemetry-sink.js.map +1 -1
- package/dist/tui/format-operator-context.d.ts +26 -4
- package/dist/tui/format-operator-context.d.ts.map +1 -1
- package/dist/tui/format-operator-context.js +73 -18
- package/dist/tui/format-operator-context.js.map +1 -1
- package/dist/tui/issue-session-tui-stream-cursor.test.d.ts +2 -0
- package/dist/tui/issue-session-tui-stream-cursor.test.d.ts.map +1 -0
- package/dist/tui/issue-session-tui-stream-cursor.test.js +47 -0
- package/dist/tui/issue-session-tui-stream-cursor.test.js.map +1 -0
- package/dist/tui/issue-session-tui-stream.d.ts +11 -0
- package/dist/tui/issue-session-tui-stream.d.ts.map +1 -0
- package/dist/tui/issue-session-tui-stream.js +117 -0
- package/dist/tui/issue-session-tui-stream.js.map +1 -0
- package/dist/tui/issue-session-tui-stream.test.d.ts +2 -0
- package/dist/tui/issue-session-tui-stream.test.d.ts.map +1 -0
- package/dist/tui/issue-session-tui-stream.test.js +380 -0
- package/dist/tui/issue-session-tui-stream.test.js.map +1 -0
- package/dist/tui/issue-session-tui.d.ts +24 -1
- package/dist/tui/issue-session-tui.d.ts.map +1 -1
- package/dist/tui/issue-session-tui.js +35 -26
- package/dist/tui/issue-session-tui.js.map +1 -1
- package/dist/tui/issue-session-tui.test.js +299 -23
- package/dist/tui/issue-session-tui.test.js.map +1 -1
- package/dist/tui/open-questions-pane.d.ts +2 -0
- package/dist/tui/open-questions-pane.d.ts.map +1 -1
- package/dist/tui/open-questions-pane.js +5 -3
- package/dist/tui/open-questions-pane.js.map +1 -1
- package/dist/tui/operator-text-area-emacs-keys.test.js +28 -25
- package/dist/tui/operator-text-area-emacs-keys.test.js.map +1 -1
- package/dist/tui/operator-text-area-keyboard-harness.d.ts +3 -2
- package/dist/tui/operator-text-area-keyboard-harness.d.ts.map +1 -1
- package/dist/tui/operator-text-area-keyboard-harness.js +3 -3
- package/dist/tui/operator-text-area-keyboard-harness.js.map +1 -1
- package/dist/tui/operator-text-area.d.ts.map +1 -1
- package/dist/tui/operator-text-area.js +2 -1
- package/dist/tui/operator-text-area.js.map +1 -1
- package/dist/tui/operator-text-area.test-double.d.ts.map +1 -1
- package/dist/tui/operator-text-area.test-double.js +3 -2
- package/dist/tui/operator-text-area.test-double.js.map +1 -1
- package/dist/tui/stream-layout.d.ts +20 -0
- package/dist/tui/stream-layout.d.ts.map +1 -0
- package/dist/tui/stream-layout.js +55 -0
- package/dist/tui/stream-layout.js.map +1 -0
- package/dist/tui/titled-border-line.d.ts +10 -1
- package/dist/tui/titled-border-line.d.ts.map +1 -1
- package/dist/tui/titled-border-line.js +62 -12
- package/dist/tui/titled-border-line.js.map +1 -1
- package/dist/tui/titled-border-pane.d.ts +5 -1
- package/dist/tui/titled-border-pane.d.ts.map +1 -1
- package/dist/tui/titled-border-pane.ink.test.js +67 -0
- package/dist/tui/titled-border-pane.ink.test.js.map +1 -1
- package/dist/tui/titled-border-pane.js +32 -3
- package/dist/tui/titled-border-pane.js.map +1 -1
- package/dist/tui/tui-layout-constants.d.ts +12 -0
- package/dist/tui/tui-layout-constants.d.ts.map +1 -1
- package/dist/tui/tui-layout-constants.js +12 -0
- package/dist/tui/tui-layout-constants.js.map +1 -1
- package/dist/tui/tui-layout-mode.d.ts +13 -0
- package/dist/tui/tui-layout-mode.d.ts.map +1 -0
- package/dist/tui/tui-layout-mode.js +16 -0
- package/dist/tui/tui-layout-mode.js.map +1 -0
- package/dist/tui/tui-view-model.d.ts +12 -1
- package/dist/tui/tui-view-model.d.ts.map +1 -1
- package/dist/tui/tui-view-model.js +25 -4
- package/dist/tui/tui-view-model.js.map +1 -1
- package/docs/config.md +170 -0
- package/docs/settings.md +161 -0
- package/package.json +8 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-layout.js","sourceRoot":"","sources":["../../src/tui/stream-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,22 +11,31 @@ export declare function getTuiBorderChars(style: TuiBorderStyle): TuiBorderChars
|
|
|
11
11
|
export interface TitledTopBorderParts {
|
|
12
12
|
left: string;
|
|
13
13
|
title: string;
|
|
14
|
+
titleRight?: string;
|
|
14
15
|
right: string;
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* 上枠線にタイトルを埋め込んだ行を組み立てる。
|
|
18
19
|
* 形式: `╭─ Title ─────────────╮`(タイトル前後に隙間)。
|
|
19
|
-
* suffix
|
|
20
|
+
* suffix はタイトル直後に付与し、titleRight は右寄せで閉じ角直前に配置する。
|
|
21
|
+
* titleRightGap は右側ラベルと閉じ枠の間に追加する表示上の区切りである。
|
|
22
|
+
* 幅不足時は titleRight → suffix → title の順で省略する。
|
|
23
|
+
* preserveTitleRight が有効な場合は titleRight を省略せず、suffix と title を先に省略する。
|
|
20
24
|
*/
|
|
21
25
|
export declare function buildTitledTopBorderParts(params: {
|
|
22
26
|
title: string;
|
|
23
27
|
suffix?: string;
|
|
28
|
+
titleRight?: string;
|
|
29
|
+
titleRightGap?: string;
|
|
30
|
+
preserveTitleRight?: boolean;
|
|
24
31
|
totalWidth: number;
|
|
25
32
|
borderStyle: TuiBorderStyle;
|
|
26
33
|
}): TitledTopBorderParts;
|
|
27
34
|
export declare function buildTitledTopBorderLine(params: {
|
|
28
35
|
title: string;
|
|
29
36
|
suffix?: string;
|
|
37
|
+
titleRight?: string;
|
|
38
|
+
titleRightGap?: string;
|
|
30
39
|
totalWidth: number;
|
|
31
40
|
borderStyle: TuiBorderStyle;
|
|
32
41
|
}): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titled-border-line.d.ts","sourceRoot":"","sources":["../../src/tui/titled-border-line.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAIvE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED
|
|
1
|
+
{"version":3,"file":"titled-border-line.d.ts","sourceRoot":"","sources":["../../src/tui/titled-border-line.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAIvE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,cAAc,CAAC;CAC7B,GAAG,oBAAoB,CA4GvB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,cAAc,CAAC;CAC7B,GAAG,MAAM,CAGT"}
|
|
@@ -7,34 +7,84 @@ export function getTuiBorderChars(style) {
|
|
|
7
7
|
/**
|
|
8
8
|
* 上枠線にタイトルを埋め込んだ行を組み立てる。
|
|
9
9
|
* 形式: `╭─ Title ─────────────╮`(タイトル前後に隙間)。
|
|
10
|
-
* suffix
|
|
10
|
+
* suffix はタイトル直後に付与し、titleRight は右寄せで閉じ角直前に配置する。
|
|
11
|
+
* titleRightGap は右側ラベルと閉じ枠の間に追加する表示上の区切りである。
|
|
12
|
+
* 幅不足時は titleRight → suffix → title の順で省略する。
|
|
13
|
+
* preserveTitleRight が有効な場合は titleRight を省略せず、suffix と title を先に省略する。
|
|
11
14
|
*/
|
|
12
15
|
export function buildTitledTopBorderParts(params) {
|
|
13
16
|
const { title, borderStyle } = params;
|
|
14
17
|
const suffix = params.suffix ?? '';
|
|
18
|
+
const titleRight = params.titleRight ?? '';
|
|
19
|
+
const titleRightGap = params.titleRightGap ?? '';
|
|
20
|
+
const preserveTitleRight = params.preserveTitleRight ?? false;
|
|
15
21
|
const chars = getTuiBorderChars(borderStyle);
|
|
16
22
|
const totalWidth = Math.max(4, params.totalWidth);
|
|
17
|
-
const buildLine = (label) => {
|
|
23
|
+
const buildLine = (label, rightLabel, allowRightOverflow = false) => {
|
|
18
24
|
const left = `${chars.tl}${chars.h} `;
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
|
|
25
|
+
const titleSeparator = ` ${chars.h}`;
|
|
26
|
+
const rightSegment = rightLabel.length > 0 ? ` ${rightLabel}${titleRightGap}` : '';
|
|
27
|
+
const closing = `${chars.h}${chars.tr}`;
|
|
28
|
+
const fixedWidth = stringWidth(left) +
|
|
29
|
+
stringWidth(label) +
|
|
30
|
+
stringWidth(titleSeparator) +
|
|
31
|
+
stringWidth(rightSegment) +
|
|
32
|
+
stringWidth(closing);
|
|
33
|
+
if (fixedWidth > totalWidth && !allowRightOverflow) {
|
|
23
34
|
return null;
|
|
24
35
|
}
|
|
25
|
-
const fillCount = totalWidth - fixedWidth;
|
|
26
|
-
const right = `${
|
|
27
|
-
return {
|
|
36
|
+
const fillCount = Math.max(0, totalWidth - fixedWidth);
|
|
37
|
+
const right = `${titleSeparator}${chars.h.repeat(Math.max(0, fillCount))}${rightSegment}${closing}`;
|
|
38
|
+
return {
|
|
39
|
+
left,
|
|
40
|
+
title: label,
|
|
41
|
+
titleRight: rightLabel.length > 0 ? rightLabel : undefined,
|
|
42
|
+
right,
|
|
43
|
+
};
|
|
28
44
|
};
|
|
29
45
|
const fullLabel = `${title}${suffix}`;
|
|
30
|
-
const full = buildLine(fullLabel);
|
|
46
|
+
const full = buildLine(fullLabel, titleRight);
|
|
31
47
|
if (full) {
|
|
32
48
|
return full;
|
|
33
49
|
}
|
|
50
|
+
if (preserveTitleRight && titleRight.length > 0) {
|
|
51
|
+
if (suffix.length > 0) {
|
|
52
|
+
for (let length = suffix.length; length > 0; length--) {
|
|
53
|
+
const truncatedSuffix = `${suffix.slice(0, length - 1)}…`;
|
|
54
|
+
const partial = buildLine(`${title}${truncatedSuffix}`, titleRight);
|
|
55
|
+
if (partial) {
|
|
56
|
+
return partial;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const withoutSuffix = buildLine(title, titleRight);
|
|
61
|
+
if (withoutSuffix) {
|
|
62
|
+
return withoutSuffix;
|
|
63
|
+
}
|
|
64
|
+
for (let length = title.length; length > 0; length--) {
|
|
65
|
+
const truncatedTitle = length < title.length ? `${title.slice(0, length - 1)}…` : title;
|
|
66
|
+
const partial = buildLine(truncatedTitle, titleRight);
|
|
67
|
+
if (partial) {
|
|
68
|
+
return partial;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Even the URL alone may be wider than the terminal. Keep it intact so a
|
|
72
|
+
// terminal's URL detector can still see the canonical target.
|
|
73
|
+
return buildLine(title, titleRight, true);
|
|
74
|
+
}
|
|
75
|
+
if (titleRight.length > 0) {
|
|
76
|
+
for (let length = titleRight.length; length > 0; length--) {
|
|
77
|
+
const truncatedRight = length < titleRight.length ? `${titleRight.slice(0, length - 1)}…` : titleRight;
|
|
78
|
+
const partial = buildLine(fullLabel, truncatedRight);
|
|
79
|
+
if (partial) {
|
|
80
|
+
return partial;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
34
84
|
if (suffix.length > 0) {
|
|
35
85
|
for (let length = suffix.length; length > 0; length--) {
|
|
36
86
|
const truncatedSuffix = `${suffix.slice(0, length - 1)}…`;
|
|
37
|
-
const partial = buildLine(`${title}${truncatedSuffix}
|
|
87
|
+
const partial = buildLine(`${title}${truncatedSuffix}`, titleRight);
|
|
38
88
|
if (partial) {
|
|
39
89
|
return partial;
|
|
40
90
|
}
|
|
@@ -42,7 +92,7 @@ export function buildTitledTopBorderParts(params) {
|
|
|
42
92
|
}
|
|
43
93
|
for (let length = title.length; length > 0; length--) {
|
|
44
94
|
const truncatedTitle = length < title.length ? `${title.slice(0, length - 1)}…` : title;
|
|
45
|
-
const minimal = buildLine(truncatedTitle);
|
|
95
|
+
const minimal = buildLine(truncatedTitle, titleRight);
|
|
46
96
|
if (minimal) {
|
|
47
97
|
return minimal;
|
|
48
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titled-border-line.js","sourceRoot":"","sources":["../../src/tui/titled-border-line.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAC;AAavC,MAAM,UAAU,iBAAiB,CAAC,KAAqB;IACrD,OAAO,KAAK,KAAK,OAAO;QACtB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;QACxD,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAC7D,CAAC;
|
|
1
|
+
{"version":3,"file":"titled-border-line.js","sourceRoot":"","sources":["../../src/tui/titled-border-line.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { type BoxProps } from 'ink';
|
|
2
2
|
import type { ReactNode } from 'react';
|
|
3
|
+
import { type IssueLinkMode } from './format-operator-context.js';
|
|
3
4
|
import { type TuiBorderStyle } from './titled-border-line.js';
|
|
4
5
|
export interface TitledBorderPaneProps {
|
|
5
6
|
title: string;
|
|
6
7
|
titleSuffix?: string;
|
|
8
|
+
titleRight?: string;
|
|
9
|
+
titleRightIssueUrl?: string;
|
|
10
|
+
titleRightLinkMode?: IssueLinkMode;
|
|
7
11
|
borderStyle: TuiBorderStyle;
|
|
8
12
|
borderColor?: BoxProps['borderColor'];
|
|
9
13
|
height: number;
|
|
@@ -12,5 +16,5 @@ export interface TitledBorderPaneProps {
|
|
|
12
16
|
children: ReactNode;
|
|
13
17
|
}
|
|
14
18
|
/** 上枠線にタイトルを埋め込んだ Ink ペイン。内側タイトル行は持たない。 */
|
|
15
|
-
export declare function TitledBorderPane({ title, titleSuffix, borderStyle, borderColor, height, paddingX, titleBold, children, }: TitledBorderPaneProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function TitledBorderPane({ title, titleSuffix, titleRight, titleRightIssueUrl, titleRightLinkMode, borderStyle, borderColor, height, paddingX, titleBold, children, }: TitledBorderPaneProps): import("react/jsx-runtime").JSX.Element;
|
|
16
20
|
//# sourceMappingURL=titled-border-pane.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titled-border-pane.d.ts","sourceRoot":"","sources":["../../src/tui/titled-border-pane.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"titled-border-pane.d.ts","sourceRoot":"","sources":["../../src/tui/titled-border-pane.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACnC,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAoBD,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,kBAA4B,EAC5B,WAAW,EACX,WAAW,EACX,MAAM,EACN,QAAY,EACZ,SAAgB,EAChB,QAAQ,GACT,EAAE,qBAAqB,2CA0EvB"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { describe, expect, it } from 'vitest';
|
|
3
3
|
import { Text } from 'ink';
|
|
4
4
|
import { render } from 'ink-testing-library';
|
|
5
|
+
import stringWidth from 'string-width';
|
|
5
6
|
import { TitledBorderPane } from './titled-border-pane.js';
|
|
6
7
|
describe('TitledBorderPane', () => {
|
|
7
8
|
it('renders embedded title on top border', () => {
|
|
@@ -19,5 +20,71 @@ describe('TitledBorderPane', () => {
|
|
|
19
20
|
expect(frame).toContain('hello');
|
|
20
21
|
expect(frame).not.toMatch(/^│ Workers/m);
|
|
21
22
|
});
|
|
23
|
+
it('keeps a truncated Issue titleRight and OSC 8 target within a narrow width', () => {
|
|
24
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
25
|
+
configurable: true,
|
|
26
|
+
value: 24,
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
29
|
+
configurable: true,
|
|
30
|
+
value: 10,
|
|
31
|
+
});
|
|
32
|
+
const issueUrl = 'http://github.com/otolab/agents-ensemble/issues/249/';
|
|
33
|
+
const canonicalIssueUrl = 'https://github.com/otolab/agents-ensemble/issues/249';
|
|
34
|
+
const fullIssueLabel = 'otolab/agents-ensemble#249';
|
|
35
|
+
const truncatedIssueLabel = 'otolab/a…';
|
|
36
|
+
const { lastFrame } = render(_jsx(TitledBorderPane, { title: "Workers", titleRight: fullIssueLabel, titleRightIssueUrl: issueUrl, titleRightLinkMode: "osc8", borderStyle: "round", height: 5, children: _jsx(Text, { children: "hello" }) }));
|
|
37
|
+
const topBorderLine = (lastFrame() ?? '').split('\n')[0] ?? '';
|
|
38
|
+
const osc8Open = `\u001b]8;;${canonicalIssueUrl}\u0007`;
|
|
39
|
+
const osc8Close = '\u001b]8;;\u0007';
|
|
40
|
+
const linkOpenIndex = topBorderLine.indexOf(osc8Open);
|
|
41
|
+
const linkCloseIndex = topBorderLine.indexOf(osc8Close, linkOpenIndex + osc8Open.length);
|
|
42
|
+
const closingBorderIndex = topBorderLine.lastIndexOf('─╮');
|
|
43
|
+
expect(topBorderLine).toContain(`${osc8Open}${truncatedIssueLabel}${osc8Close}`);
|
|
44
|
+
expect(topBorderLine).not.toContain(`\u001b]8;;${issueUrl}\u0007`);
|
|
45
|
+
expect(topBorderLine).not.toContain(fullIssueLabel);
|
|
46
|
+
expect(stringWidth(topBorderLine)).toBe(24);
|
|
47
|
+
expect(linkOpenIndex).toBeGreaterThanOrEqual(0);
|
|
48
|
+
expect(linkCloseIndex).toBeGreaterThan(linkOpenIndex + osc8Open.length);
|
|
49
|
+
expect(linkCloseIndex).toBeLessThan(closingBorderIndex);
|
|
50
|
+
expect(topBorderLine.slice(closingBorderIndex)).not.toContain(osc8Close);
|
|
51
|
+
expect(topBorderLine.match(/\u001b\]8;;/g)).toHaveLength(2);
|
|
52
|
+
});
|
|
53
|
+
it('renders the canonical Issue URL with a plain separator in URL fallback mode', () => {
|
|
54
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
55
|
+
configurable: true,
|
|
56
|
+
value: 80,
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
59
|
+
configurable: true,
|
|
60
|
+
value: 10,
|
|
61
|
+
});
|
|
62
|
+
const issueUrl = 'http://github.com/otolab/agents-ensemble/issues/249/';
|
|
63
|
+
const canonicalIssueUrl = 'https://github.com/otolab/agents-ensemble/issues/249';
|
|
64
|
+
const { lastFrame } = render(_jsx(TitledBorderPane, { title: "Workers", titleRight: "otolab/agents-ensemble#249", titleRightIssueUrl: issueUrl, titleRightLinkMode: "url", borderStyle: "round", height: 5, children: _jsx(Text, { children: "hello" }) }));
|
|
65
|
+
const topBorderLine = (lastFrame() ?? '').split('\n')[0] ?? '';
|
|
66
|
+
expect(topBorderLine).toContain(`${canonicalIssueUrl} ─╮`);
|
|
67
|
+
expect(topBorderLine).not.toContain('otolab/agents-ensemble#249');
|
|
68
|
+
expect(topBorderLine).not.toContain('\u001b]8;;');
|
|
69
|
+
expect(stringWidth(topBorderLine)).toBe(80);
|
|
70
|
+
});
|
|
71
|
+
it('preserves the canonical Issue URL in URL fallback mode at a narrow width', () => {
|
|
72
|
+
Object.defineProperty(process.stdout, 'columns', {
|
|
73
|
+
configurable: true,
|
|
74
|
+
value: 24,
|
|
75
|
+
});
|
|
76
|
+
Object.defineProperty(process.stdout, 'rows', {
|
|
77
|
+
configurable: true,
|
|
78
|
+
value: 10,
|
|
79
|
+
});
|
|
80
|
+
const issueUrl = 'http://github.com/otolab/agents-ensemble/issues/249/';
|
|
81
|
+
const canonicalIssueUrl = 'https://github.com/otolab/agents-ensemble/issues/249';
|
|
82
|
+
const { lastFrame } = render(_jsx(TitledBorderPane, { title: "Workers", titleSuffix: " \u2014 conductor dispatch \u4FDD\u7559\u4E2D\uFF083 \u4EF6\uFF09", titleRight: "otolab/agents-ensemble#249", titleRightIssueUrl: issueUrl, titleRightLinkMode: "url", borderStyle: "round", height: 5, children: _jsx(Text, { children: "hello" }) }));
|
|
83
|
+
const topBorderLine = (lastFrame() ?? '').split('\n')[0] ?? '';
|
|
84
|
+
expect(topBorderLine).toContain(canonicalIssueUrl);
|
|
85
|
+
expect(topBorderLine).toContain(`${canonicalIssueUrl} ─╮`);
|
|
86
|
+
expect(topBorderLine).not.toContain('https:/…');
|
|
87
|
+
expect(topBorderLine).not.toContain('\u001b]8;;');
|
|
88
|
+
});
|
|
22
89
|
});
|
|
23
90
|
//# sourceMappingURL=titled-border-pane.ink.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titled-border-pane.ink.test.js","sourceRoot":"","sources":["../../src/tui/titled-border-pane.ink.test.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE;YAC/C,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;YAC5C,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,gBAAgB,IAAC,KAAK,EAAC,SAAS,EAAC,WAAW,EAAC,OAAO,EAAC,MAAM,EAAE,CAAC,YAC7D,KAAC,IAAI,wBAAa,GACD,CACpB,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"titled-border-pane.ink.test.js","sourceRoot":"","sources":["../../src/tui/titled-border-pane.ink.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,45 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
|
+
import stringWidth from 'string-width';
|
|
4
|
+
import { formatIssueReference, formatOsc8Link, } from './format-operator-context.js';
|
|
3
5
|
import { buildTitledTopBorderParts, } from './titled-border-line.js';
|
|
6
|
+
function renderTitleRight(params) {
|
|
7
|
+
const { titleRight, titleRightIssueUrl, titleRightLinkMode, borderColor } = params;
|
|
8
|
+
if (!titleRight) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (titleRightIssueUrl && titleRightLinkMode === 'osc8') {
|
|
12
|
+
return _jsx(Text, { children: formatOsc8Link(titleRight, titleRightIssueUrl) });
|
|
13
|
+
}
|
|
14
|
+
return _jsx(Text, { color: borderColor, children: titleRight });
|
|
15
|
+
}
|
|
4
16
|
/** 上枠線にタイトルを埋め込んだ Ink ペイン。内側タイトル行は持たない。 */
|
|
5
|
-
export function TitledBorderPane({ title, titleSuffix, borderStyle, borderColor, height, paddingX = 1, titleBold = true, children, }) {
|
|
17
|
+
export function TitledBorderPane({ title, titleSuffix, titleRight, titleRightIssueUrl, titleRightLinkMode = 'label', borderStyle, borderColor, height, paddingX = 1, titleBold = true, children, }) {
|
|
6
18
|
const totalWidth = process.stdout.columns ?? 80;
|
|
19
|
+
const titleRightText = titleRightIssueUrl && titleRightLinkMode === 'url'
|
|
20
|
+
? formatIssueReference(titleRightIssueUrl, 'url')
|
|
21
|
+
: titleRight;
|
|
7
22
|
const parts = buildTitledTopBorderParts({
|
|
8
23
|
title,
|
|
9
24
|
suffix: titleSuffix,
|
|
25
|
+
titleRight: titleRightText,
|
|
26
|
+
titleRightGap: titleRightIssueUrl && titleRightLinkMode === 'url' ? ' ' : undefined,
|
|
27
|
+
preserveTitleRight: Boolean(titleRightIssueUrl && titleRightLinkMode === 'url'),
|
|
10
28
|
totalWidth,
|
|
11
29
|
borderStyle,
|
|
12
30
|
});
|
|
13
31
|
const bodyHeight = Math.max(1, height - 1);
|
|
14
|
-
|
|
32
|
+
const titleRightPrefix = parts.titleRight ? ` ${parts.titleRight}` : '';
|
|
33
|
+
const titleRightIndex = titleRightPrefix.length > 0 ? parts.right.lastIndexOf(titleRightPrefix) : -1;
|
|
34
|
+
const rightBeforeTitleRight = titleRightIndex >= 0 ? parts.right.slice(0, titleRightIndex + 1) : parts.right;
|
|
35
|
+
const rightAfterTitleRight = titleRightIndex >= 0 ? parts.right.slice(titleRightIndex + titleRightPrefix.length) : '';
|
|
36
|
+
const topBorderLine = `${parts.left}${parts.title}${parts.right}`;
|
|
37
|
+
const preserveUrlFallback = Boolean(titleRightIssueUrl && titleRightLinkMode === 'url');
|
|
38
|
+
return (_jsxs(Box, { flexDirection: "column", height: height, overflowX: "visible", overflowY: "hidden", children: [_jsx(Box, { flexDirection: "row", overflow: "visible", children: preserveUrlFallback ? (_jsx(Box, { flexShrink: 0, width: stringWidth(topBorderLine), overflow: "visible", children: _jsx(Text, { color: borderColor, children: topBorderLine }) })) : (_jsxs(_Fragment, { children: [_jsx(Text, { color: borderColor, children: parts.left }), titleBold ? (_jsx(Text, { bold: true, color: borderColor, children: parts.title })) : (_jsx(Text, { color: borderColor, children: parts.title })), _jsx(Text, { color: borderColor, children: rightBeforeTitleRight }), renderTitleRight({
|
|
39
|
+
titleRight: parts.titleRight,
|
|
40
|
+
titleRightIssueUrl,
|
|
41
|
+
titleRightLinkMode,
|
|
42
|
+
borderColor,
|
|
43
|
+
}), _jsx(Text, { color: borderColor, children: rightAfterTitleRight })] })) }), _jsx(Box, { flexGrow: 1, flexDirection: "column", borderStyle: borderStyle, borderTop: false, borderColor: borderColor, paddingX: paddingX, height: bodyHeight, overflow: "hidden", children: children })] }));
|
|
15
44
|
}
|
|
16
45
|
//# sourceMappingURL=titled-border-pane.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titled-border-pane.js","sourceRoot":"","sources":["../../src/tui/titled-border-pane.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAiB,MAAM,KAAK,CAAC;AAE/C,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"titled-border-pane.js","sourceRoot":"","sources":["../../src/tui/titled-border-pane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,12 @@ export declare const WORKER_PANE_TITLE = "Workers";
|
|
|
14
14
|
export declare const OPEN_QUESTIONS_PANE_TITLE = "Open questions";
|
|
15
15
|
/** Operator input ペインの UI ラベル。 */
|
|
16
16
|
export declare const INPUT_PANE_TITLE = "Operator input";
|
|
17
|
+
/** Operator input ペイン枠線・タイトル色(他ペインと区別し視認性を確保)。 */
|
|
18
|
+
export declare const INPUT_PANE_BORDER_COLOR = "blue";
|
|
19
|
+
/** Operator input コンテキストヒント行の色。 */
|
|
20
|
+
export declare const INPUT_PANE_HINT_COLOR = "blue";
|
|
21
|
+
/** Operator input プロンプト(`operator> `)の色。 */
|
|
22
|
+
export declare const INPUT_PANE_PROMPT_COLOR = "blue";
|
|
17
23
|
/** Worker 状態ペインの固定高さ(枠線込み。タイトルは上枠線埋め込み + サマリ 4 行)。 */
|
|
18
24
|
export declare const WORKER_PANE_HEIGHT = 6;
|
|
19
25
|
/**
|
|
@@ -27,6 +33,12 @@ export declare const OPEN_QUESTIONS_PANE_MAX_HEIGHT_RATIO = 0.35;
|
|
|
27
33
|
export declare const OPEN_QUESTIONS_PANE_MAX_DISPLAY_LINES = 8;
|
|
28
34
|
/** Open questions ペインタイトルに付与する選択操作ヒント。 */
|
|
29
35
|
export declare const OPEN_QUESTIONS_SELECTION_HINT = " \u2014 Shift+\u2191\u2193\u3067\u9078\u629E";
|
|
36
|
+
/** Open questions がないときに Operator input へ表示する任意入力 prompt。 */
|
|
37
|
+
export declare const OPERATOR_INPUT_DISCRETIONARY_HINT = "\u4EFB\u610F\u306E\u30BF\u30A4\u30DF\u30F3\u30B0\u3067\u5165\u529B \u00B7 /exit \u3067\u7D42\u4E86";
|
|
38
|
+
/** post-loop 待機中に Operator input へ表示する追加入力 prompt。 */
|
|
39
|
+
export declare const OPERATOR_INPUT_POST_LOOP_HINT = "\u8FFD\u52A0\u6307\u793A\u3092\u5165\u529B\u3059\u308B\u304B /exit \u3067\u7D42\u4E86";
|
|
40
|
+
/** 終了処理中に Operator input へ表示する prompt。 */
|
|
41
|
+
export declare const OPERATOR_INPUT_SHUTTING_DOWN_HINT = "\u7D42\u4E86\u3057\u3066\u3044\u307E\u3059\u2026";
|
|
30
42
|
/** 入力ペインの枠線(上下)行数。`PANE_BORDER_ROWS` と同値。 */
|
|
31
43
|
export declare const INPUT_PANE_BORDER_ROWS = 2;
|
|
32
44
|
/** ペイン内水平 padding(`paddingX`)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-layout-constants.d.ts","sourceRoot":"","sources":["../../src/tui/tui-layout-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,6BAA6B;AAC7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,oEAAoE;AACpE,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,2BAA2B;AAC3B,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,qDAAqD;AACrD,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,+CAA+C;AAC/C,eAAO,MAAM,oCAAoC,OAAO,CAAC;AAEzD,sCAAsC;AACtC,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,0CAA0C;AAC1C,eAAO,MAAM,6BAA6B,iDAAmB,CAAC;AAE9D,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB,IAAmB,CAAC;AAEvD,kCAAkC;AAClC,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,kDAAkD;AAClD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAkD,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,gCAAgC;AAChC,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,uBAAuB;AACvB,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C,0BAA0B;AAC1B,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"tui-layout-constants.d.ts","sourceRoot":"","sources":["../../src/tui/tui-layout-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,6BAA6B;AAC7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,oEAAoE;AACpE,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,2BAA2B;AAC3B,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,qDAAqD;AACrD,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,mCAAmC;AACnC,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAE5C,4CAA4C;AAC5C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,+CAA+C;AAC/C,eAAO,MAAM,oCAAoC,OAAO,CAAC;AAEzD,sCAAsC;AACtC,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,0CAA0C;AAC1C,eAAO,MAAM,6BAA6B,iDAAmB,CAAC;AAE9D,6DAA6D;AAC7D,eAAO,MAAM,iCAAiC,uGAA4B,CAAC;AAE3E,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,0FAAyB,CAAC;AAEpE,0CAA0C;AAC1C,eAAO,MAAM,iCAAiC,qDAAa,CAAC;AAE5D,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB,IAAmB,CAAC;AAEvD,kCAAkC;AAClC,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,kDAAkD;AAClD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAkD,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,gCAAgC;AAChC,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,uBAAuB;AACvB,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C,0BAA0B;AAC1B,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
|
@@ -14,6 +14,12 @@ export const WORKER_PANE_TITLE = 'Workers';
|
|
|
14
14
|
export const OPEN_QUESTIONS_PANE_TITLE = 'Open questions';
|
|
15
15
|
/** Operator input ペインの UI ラベル。 */
|
|
16
16
|
export const INPUT_PANE_TITLE = 'Operator input';
|
|
17
|
+
/** Operator input ペイン枠線・タイトル色(他ペインと区別し視認性を確保)。 */
|
|
18
|
+
export const INPUT_PANE_BORDER_COLOR = 'blue';
|
|
19
|
+
/** Operator input コンテキストヒント行の色。 */
|
|
20
|
+
export const INPUT_PANE_HINT_COLOR = 'blue';
|
|
21
|
+
/** Operator input プロンプト(`operator> `)の色。 */
|
|
22
|
+
export const INPUT_PANE_PROMPT_COLOR = 'blue';
|
|
17
23
|
/** Worker 状態ペインの固定高さ(枠線込み。タイトルは上枠線埋め込み + サマリ 4 行)。 */
|
|
18
24
|
export const WORKER_PANE_HEIGHT = 6;
|
|
19
25
|
/**
|
|
@@ -27,6 +33,12 @@ export const OPEN_QUESTIONS_PANE_MAX_HEIGHT_RATIO = 0.35;
|
|
|
27
33
|
export const OPEN_QUESTIONS_PANE_MAX_DISPLAY_LINES = 8;
|
|
28
34
|
/** Open questions ペインタイトルに付与する選択操作ヒント。 */
|
|
29
35
|
export const OPEN_QUESTIONS_SELECTION_HINT = ' — Shift+↑↓で選択';
|
|
36
|
+
/** Open questions がないときに Operator input へ表示する任意入力 prompt。 */
|
|
37
|
+
export const OPERATOR_INPUT_DISCRETIONARY_HINT = '任意のタイミングで入力 · /exit で終了';
|
|
38
|
+
/** post-loop 待機中に Operator input へ表示する追加入力 prompt。 */
|
|
39
|
+
export const OPERATOR_INPUT_POST_LOOP_HINT = '追加指示を入力するか /exit で終了';
|
|
40
|
+
/** 終了処理中に Operator input へ表示する prompt。 */
|
|
41
|
+
export const OPERATOR_INPUT_SHUTTING_DOWN_HINT = '終了しています…';
|
|
30
42
|
/** 入力ペインの枠線(上下)行数。`PANE_BORDER_ROWS` と同値。 */
|
|
31
43
|
export const INPUT_PANE_BORDER_ROWS = PANE_BORDER_ROWS;
|
|
32
44
|
/** ペイン内水平 padding(`paddingX`)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-layout-constants.js","sourceRoot":"","sources":["../../src/tui/tui-layout-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAE/C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,qDAAqD;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAE1D,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oCAAoC,GAAG,IAAI,CAAC;AAEzD,sCAAsC;AACtC,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AAEvD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,6BAA6B,GAAG,gBAAgB,CAAC;AAE9D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,kDAAkD;AAClD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,GAAG,cAAc,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,gCAAgC;AAChC,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,uBAAuB;AACvB,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAE/C,0BAA0B;AAC1B,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"tui-layout-constants.js","sourceRoot":"","sources":["../../src/tui/tui-layout-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAE/C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,qDAAqD;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAE1D,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD,kDAAkD;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,mCAAmC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oCAAoC,GAAG,IAAI,CAAC;AAEzD,sCAAsC;AACtC,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AAEvD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,6BAA6B,GAAG,gBAAgB,CAAC;AAE9D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iCAAiC,GAAG,yBAAyB,CAAC;AAE3E,sDAAsD;AACtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,sBAAsB,CAAC;AAEpE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC;AAE5D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,kDAAkD;AAClD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,GAAG,cAAc,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,gCAAgC;AAChC,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,uBAAuB;AACvB,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAE/C,0BAA0B;AAC1B,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TUI_LAYOUT_ENV, type EnsembleConfig, type TuiLayoutMode } from '@agents-ensemble/core';
|
|
2
|
+
export type { TuiLayoutMode };
|
|
3
|
+
export { TUI_LAYOUT_ENV };
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the TUI layout without allowing stream mode to affect non-TTY output.
|
|
6
|
+
* Unknown env values intentionally keep the existing pane layout.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveTuiLayoutMode(options?: {
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
config?: EnsembleConfig;
|
|
11
|
+
isTty?: boolean;
|
|
12
|
+
}): TuiLayoutMode;
|
|
13
|
+
//# sourceMappingURL=tui-layout-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-layout-mode.d.ts","sourceRoot":"","sources":["../../src/tui/tui-layout-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,aAAa,EAAE,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,aAAa,CASf"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { resolveTuiLayoutSetting, TUI_LAYOUT_ENV, } from '@agents-ensemble/core';
|
|
2
|
+
export { TUI_LAYOUT_ENV };
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the TUI layout without allowing stream mode to affect non-TTY output.
|
|
5
|
+
* Unknown env values intentionally keep the existing pane layout.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveTuiLayoutMode(options = {}) {
|
|
8
|
+
if (options.isTty === false) {
|
|
9
|
+
return 'pane';
|
|
10
|
+
}
|
|
11
|
+
return resolveTuiLayoutSetting({
|
|
12
|
+
env: options.env ?? process.env,
|
|
13
|
+
config: options.config,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tui-layout-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-layout-mode.js","sourceRoot":"","sources":["../../src/tui/tui-layout-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,cAAc,GAGf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAII,EAAE;IAEN,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,uBAAuB,CAAC;QAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -8,6 +8,14 @@ export interface TuiViewSnapshot {
|
|
|
8
8
|
shuttingDown: boolean;
|
|
9
9
|
operatorContext: OperatorInputContext | undefined;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* TUI が使う未回答 open question の正本を解決する。
|
|
13
|
+
*
|
|
14
|
+
* `operatorContext` は `OpenQuestionRegistry.listOpen()` のスナップショットで、
|
|
15
|
+
* resume 時にも binding の初期化で設定される。binding 前の描画だけは、イベント
|
|
16
|
+
* reducer が保持する display state をフォールバックとして使う。
|
|
17
|
+
*/
|
|
18
|
+
export declare function getTuiOpenQuestions(snapshot: TuiViewSnapshot): TuiViewSnapshot['displayState']['openQuestions'];
|
|
11
19
|
export interface TuiViewModel {
|
|
12
20
|
subscribe: (listener: () => void) => () => void;
|
|
13
21
|
getSnapshot: () => TuiViewSnapshot;
|
|
@@ -18,5 +26,8 @@ export interface TuiViewModel {
|
|
|
18
26
|
setShuttingDown: (shuttingDown: boolean) => void;
|
|
19
27
|
setOperatorContext: (context: OperatorInputContext | undefined) => void;
|
|
20
28
|
}
|
|
21
|
-
export declare function createTuiViewModel(
|
|
29
|
+
export declare function createTuiViewModel(options?: {
|
|
30
|
+
/** `null` keeps every entry so Ink's `<Static>` can append monotonically. */
|
|
31
|
+
activityLogWindowSize?: number | null;
|
|
32
|
+
}): TuiViewModel;
|
|
22
33
|
//# sourceMappingURL=tui-view-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-view-model.d.ts","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,
|
|
1
|
+
{"version":3,"file":"tui-view-model.d.ts","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,GACxB,eAAe,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAElD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,eAAe,CAAC;IACnC,eAAe,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,0BAA0B,EAAE,MAAM,IAAI,CAAC;IACvC,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IAC1C,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,YAAY,CAyFpB"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { INITIAL_SESSION_DISPLAY_STATE } from '../display/session-display-state.js';
|
|
2
|
-
import { appendActivityLogEntry, } from './activity-log.js';
|
|
2
|
+
import { ACTIVITY_LOG_WINDOW_SIZE, appendActivityLogEntry, } from './activity-log.js';
|
|
3
3
|
import { trimBlankLinesOnly } from './operator-input-layout.js';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* TUI が使う未回答 open question の正本を解決する。
|
|
6
|
+
*
|
|
7
|
+
* `operatorContext` は `OpenQuestionRegistry.listOpen()` のスナップショットで、
|
|
8
|
+
* resume 時にも binding の初期化で設定される。binding 前の描画だけは、イベント
|
|
9
|
+
* reducer が保持する display state をフォールバックとして使う。
|
|
10
|
+
*/
|
|
11
|
+
export function getTuiOpenQuestions(snapshot) {
|
|
12
|
+
return snapshot.operatorContext?.openQuestions ?? snapshot.displayState.openQuestions;
|
|
13
|
+
}
|
|
14
|
+
export function createTuiViewModel(options = {}) {
|
|
15
|
+
const activityLogWindowSize = options.activityLogWindowSize === undefined
|
|
16
|
+
? ACTIVITY_LOG_WINDOW_SIZE
|
|
17
|
+
: options.activityLogWindowSize;
|
|
5
18
|
let displayState = INITIAL_SESSION_DISPLAY_STATE;
|
|
6
19
|
let activityLog = [];
|
|
7
20
|
let postLoopWaiting = false;
|
|
@@ -49,11 +62,19 @@ export function createTuiViewModel() {
|
|
|
49
62
|
if (!trimmed) {
|
|
50
63
|
return;
|
|
51
64
|
}
|
|
52
|
-
|
|
65
|
+
const entry = { label, text: trimmed };
|
|
66
|
+
activityLog =
|
|
67
|
+
activityLogWindowSize === null
|
|
68
|
+
? [...activityLog, entry]
|
|
69
|
+
: appendActivityLogEntry(activityLog, entry, activityLogWindowSize);
|
|
53
70
|
notify();
|
|
54
71
|
},
|
|
55
72
|
appendActivityLogSeparator() {
|
|
56
|
-
|
|
73
|
+
const entry = { label: 'separator', text: '' };
|
|
74
|
+
activityLog =
|
|
75
|
+
activityLogWindowSize === null
|
|
76
|
+
? [...activityLog, entry]
|
|
77
|
+
: appendActivityLogEntry(activityLog, entry, activityLogWindowSize);
|
|
57
78
|
notify();
|
|
58
79
|
},
|
|
59
80
|
setPostLoopWaiting(waiting) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-view-model.js","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EACL,sBAAsB,GAGvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"tui-view-model.js","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"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"}
|