poly-weaver 0.13.4 → 0.14.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/agents/executors/dsl.d.ts +11 -0
- package/dist/agents/executors/dsl.d.ts.map +1 -0
- package/dist/agents/executors/dsl.js +11 -0
- package/dist/agents/executors/dsl.js.map +1 -0
- package/dist/agents/executors/index.d.ts +8 -0
- package/dist/agents/executors/index.d.ts.map +1 -0
- package/dist/agents/executors/index.js +17 -0
- package/dist/agents/executors/index.js.map +1 -0
- package/dist/agents/executors/prompts.d.ts +18 -0
- package/dist/agents/executors/prompts.d.ts.map +1 -0
- package/dist/agents/executors/prompts.js +62 -0
- package/dist/agents/executors/prompts.js.map +1 -0
- package/dist/agents/executors/types.d.ts +8 -0
- package/dist/agents/executors/types.d.ts.map +1 -0
- package/dist/agents/executors/types.js +2 -0
- package/dist/agents/executors/types.js.map +1 -0
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/registry.d.ts +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +3 -0
- package/dist/agents/registry.js.map +1 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +20 -45
- package/dist/agents/runner.js.map +1 -1
- package/dist/ansi.d.ts +4 -0
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +4 -0
- package/dist/ansi.js.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/crosscheck/broadcast-composer.d.ts +89 -0
- package/dist/crosscheck/broadcast-composer.d.ts.map +1 -0
- package/dist/crosscheck/broadcast-composer.js +431 -0
- package/dist/crosscheck/broadcast-composer.js.map +1 -0
- package/dist/crosscheck/coordinator.d.ts +154 -0
- package/dist/crosscheck/coordinator.d.ts.map +1 -0
- package/dist/crosscheck/coordinator.js +1695 -0
- package/dist/crosscheck/coordinator.js.map +1 -0
- package/dist/crosscheck/key-helpers.d.ts +16 -0
- package/dist/crosscheck/key-helpers.d.ts.map +1 -0
- package/dist/crosscheck/key-helpers.js +42 -0
- package/dist/crosscheck/key-helpers.js.map +1 -0
- package/dist/crosscheck/live-agent-session.d.ts +38 -0
- package/dist/crosscheck/live-agent-session.d.ts.map +1 -0
- package/dist/crosscheck/live-agent-session.js +126 -0
- package/dist/crosscheck/live-agent-session.js.map +1 -0
- package/dist/crosscheck/reconcile.d.ts +10 -0
- package/dist/crosscheck/reconcile.d.ts.map +1 -0
- package/dist/crosscheck/reconcile.js +29 -0
- package/dist/crosscheck/reconcile.js.map +1 -0
- package/dist/crosscheck/state.d.ts +102 -0
- package/dist/crosscheck/state.d.ts.map +1 -0
- package/dist/crosscheck/state.js +221 -0
- package/dist/crosscheck/state.js.map +1 -0
- package/dist/dsl.d.ts +2 -0
- package/dist/dsl.d.ts.map +1 -1
- package/dist/dsl.js +2 -1
- package/dist/dsl.js.map +1 -1
- package/dist/dump/service.d.ts +6 -3
- package/dist/dump/service.d.ts.map +1 -1
- package/dist/dump/service.js +32 -12
- package/dist/dump/service.js.map +1 -1
- package/dist/flow/built-in/crosscheck-factory.d.ts +15 -0
- package/dist/flow/built-in/crosscheck-factory.d.ts.map +1 -0
- package/dist/flow/built-in/crosscheck-factory.js +60 -0
- package/dist/flow/built-in/crosscheck-factory.js.map +1 -0
- package/dist/flow/built-in/crosscheck.d.ts +6 -0
- package/dist/flow/built-in/crosscheck.d.ts.map +1 -0
- package/dist/flow/built-in/crosscheck.js +6 -0
- package/dist/flow/built-in/crosscheck.js.map +1 -0
- package/dist/flow/built-in/default-factory.d.ts.map +1 -1
- package/dist/flow/built-in/default-factory.js +1 -0
- package/dist/flow/built-in/default-factory.js.map +1 -1
- package/dist/flow/built-in/simplify-factory.d.ts.map +1 -1
- package/dist/flow/built-in/simplify-factory.js +1 -0
- package/dist/flow/built-in/simplify-factory.js.map +1 -1
- package/dist/flow/custom/load.d.ts.map +1 -1
- package/dist/flow/custom/load.js +4 -0
- package/dist/flow/custom/load.js.map +1 -1
- package/dist/flow/dsl.d.ts +1 -0
- package/dist/flow/dsl.d.ts.map +1 -1
- package/dist/flow/dsl.js +1 -0
- package/dist/flow/dsl.js.map +1 -1
- package/dist/flow/index.d.ts +2 -1
- package/dist/flow/index.d.ts.map +1 -1
- package/dist/flow/index.js +2 -1
- package/dist/flow/index.js.map +1 -1
- package/dist/flow/params.d.ts +7 -1
- package/dist/flow/params.d.ts.map +1 -1
- package/dist/flow/params.js +28 -13
- package/dist/flow/params.js.map +1 -1
- package/dist/flow/types.d.ts +8 -1
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/flow/types.js.map +1 -1
- package/dist/offscreen/controller.d.ts +9 -3
- package/dist/offscreen/controller.d.ts.map +1 -1
- package/dist/offscreen/controller.js +149 -75
- package/dist/offscreen/controller.js.map +1 -1
- package/dist/offscreen/fork-busy.d.ts +2 -1
- package/dist/offscreen/fork-busy.d.ts.map +1 -1
- package/dist/offscreen/fork-busy.js +5 -2
- package/dist/offscreen/fork-busy.js.map +1 -1
- package/dist/offscreen/fork.d.ts +1 -1
- package/dist/offscreen/fork.d.ts.map +1 -1
- package/dist/offscreen/fork.js +4 -2
- package/dist/offscreen/fork.js.map +1 -1
- package/dist/offscreen/inquiry-sender.d.ts +4 -9
- package/dist/offscreen/inquiry-sender.d.ts.map +1 -1
- package/dist/offscreen/inquiry-sender.js +5 -54
- package/dist/offscreen/inquiry-sender.js.map +1 -1
- package/dist/offscreen/session-turn-monitor.d.ts +66 -0
- package/dist/offscreen/session-turn-monitor.d.ts.map +1 -0
- package/dist/offscreen/session-turn-monitor.js +257 -0
- package/dist/offscreen/session-turn-monitor.js.map +1 -0
- package/dist/orchestrator.d.ts +7 -6
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +122 -61
- package/dist/orchestrator.js.map +1 -1
- package/dist/preview-panel.d.ts +1 -0
- package/dist/preview-panel.d.ts.map +1 -1
- package/dist/preview-panel.js +24 -20
- package/dist/preview-panel.js.map +1 -1
- package/dist/providers/claude/completion.d.ts +1 -0
- package/dist/providers/claude/completion.d.ts.map +1 -1
- package/dist/providers/claude/completion.js +5 -0
- package/dist/providers/claude/completion.js.map +1 -1
- package/dist/providers/claude/composer.d.ts +6 -0
- package/dist/providers/claude/composer.d.ts.map +1 -0
- package/dist/providers/claude/composer.js +7 -0
- package/dist/providers/claude/composer.js.map +1 -0
- package/dist/providers/claude/session.d.ts +1 -0
- package/dist/providers/claude/session.d.ts.map +1 -1
- package/dist/providers/claude/session.js +21 -1
- package/dist/providers/claude/session.js.map +1 -1
- package/dist/providers/claude/strategy.d.ts +6 -1
- package/dist/providers/claude/strategy.d.ts.map +1 -1
- package/dist/providers/claude/strategy.js +40 -11
- package/dist/providers/claude/strategy.js.map +1 -1
- package/dist/providers/codex/composer.d.ts +6 -0
- package/dist/providers/codex/composer.d.ts.map +1 -0
- package/dist/providers/codex/composer.js +143 -0
- package/dist/providers/codex/composer.js.map +1 -0
- package/dist/providers/codex/plan-mode-activator.d.ts +4 -6
- package/dist/providers/codex/plan-mode-activator.d.ts.map +1 -1
- package/dist/providers/codex/plan-mode-activator.js +16 -21
- package/dist/providers/codex/plan-mode-activator.js.map +1 -1
- package/dist/providers/codex/strategy.d.ts +5 -1
- package/dist/providers/codex/strategy.d.ts.map +1 -1
- package/dist/providers/codex/strategy.js +8 -3
- package/dist/providers/codex/strategy.js.map +1 -1
- package/dist/providers/composer-utils.d.ts +9 -0
- package/dist/providers/composer-utils.d.ts.map +1 -0
- package/dist/providers/composer-utils.js +218 -0
- package/dist/providers/composer-utils.js.map +1 -0
- package/dist/providers/copilot/completion.d.ts +6 -2
- package/dist/providers/copilot/completion.d.ts.map +1 -1
- package/dist/providers/copilot/completion.js +56 -11
- package/dist/providers/copilot/completion.js.map +1 -1
- package/dist/providers/copilot/composer.d.ts +6 -0
- package/dist/providers/copilot/composer.d.ts.map +1 -0
- package/dist/providers/copilot/composer.js +10 -0
- package/dist/providers/copilot/composer.js.map +1 -0
- package/dist/providers/copilot/strategy.d.ts +6 -1
- package/dist/providers/copilot/strategy.d.ts.map +1 -1
- package/dist/providers/copilot/strategy.js +69 -12
- package/dist/providers/copilot/strategy.js.map +1 -1
- package/dist/providers/fork.d.ts +3 -1
- package/dist/providers/fork.d.ts.map +1 -1
- package/dist/providers/fork.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/live.d.ts +17 -0
- package/dist/providers/live.d.ts.map +1 -0
- package/dist/providers/live.js +201 -0
- package/dist/providers/live.js.map +1 -0
- package/dist/providers/session-launch.d.ts +25 -0
- package/dist/providers/session-launch.d.ts.map +1 -0
- package/dist/providers/session-launch.js +54 -0
- package/dist/providers/session-launch.js.map +1 -0
- package/dist/providers/types.d.ts +75 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/resume-tui.d.ts.map +1 -1
- package/dist/resume-tui.js +3 -1
- package/dist/resume-tui.js.map +1 -1
- package/dist/session/list.d.ts.map +1 -1
- package/dist/session/list.js +5 -3
- package/dist/session/list.js.map +1 -1
- package/dist/session/locator.d.ts.map +1 -1
- package/dist/session/locator.js +6 -22
- package/dist/session/locator.js.map +1 -1
- package/dist/session/reader.d.ts +8 -0
- package/dist/session/reader.d.ts.map +1 -1
- package/dist/session/reader.js +12 -2
- package/dist/session/reader.js.map +1 -1
- package/dist/session/resume.d.ts.map +1 -1
- package/dist/session/resume.js +1 -0
- package/dist/session/resume.js.map +1 -1
- package/dist/session/session-store.d.ts +3 -0
- package/dist/session/session-store.d.ts.map +1 -1
- package/dist/session/session-store.js +18 -6
- package/dist/session/session-store.js.map +1 -1
- package/dist/startup-tui.js +2 -2
- package/dist/startup-tui.js.map +1 -1
- package/dist/status-bar.d.ts +3 -0
- package/dist/status-bar.d.ts.map +1 -1
- package/dist/status-bar.js.map +1 -1
- package/dist/terminal/host.d.ts +19 -3
- package/dist/terminal/host.d.ts.map +1 -1
- package/dist/terminal/host.js +45 -7
- package/dist/terminal/host.js.map +1 -1
- package/dist/terminal/kitty-negotiator.js +1 -1
- package/dist/terminal/kitty-negotiator.js.map +1 -1
- package/dist/terminal/paste-submit.d.ts +18 -27
- package/dist/terminal/paste-submit.d.ts.map +1 -1
- package/dist/terminal/paste-submit.js +81 -128
- package/dist/terminal/paste-submit.js.map +1 -1
- package/dist/terminal-input.d.ts.map +1 -1
- package/dist/terminal-input.js +3 -4
- package/dist/terminal-input.js.map +1 -1
- package/dist/util/abortable-sleep.d.ts +6 -0
- package/dist/util/abortable-sleep.d.ts.map +1 -0
- package/dist/util/abortable-sleep.js +40 -0
- package/dist/util/abortable-sleep.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { renderedLines } from "../../terminal/paste-submit.js";
|
|
2
|
+
import { hasNonDimVisibleCell, hasPermissionPrompt, isStructuredMenuAt, } from "../composer-utils.js";
|
|
3
|
+
const CODEX_PROMPT_MARKER = "\u203a";
|
|
4
|
+
const CODEX_MENU_MARKERS = [">", CODEX_PROMPT_MARKER];
|
|
5
|
+
const CODEX_MENU_MARKER_SET = CODEX_MENU_MARKERS;
|
|
6
|
+
const CODEX_HEADER_RE = /^>_\s+OpenAI Codex\b/;
|
|
7
|
+
export class CodexComposerInspector {
|
|
8
|
+
inspect(vt) {
|
|
9
|
+
const lines = renderedLines(vt);
|
|
10
|
+
const footerIndex = footerBoundary(lines);
|
|
11
|
+
if (footerIndex === undefined)
|
|
12
|
+
return "unknown";
|
|
13
|
+
for (let index = footerIndex - 1; index >= 0; index--) {
|
|
14
|
+
const line = lines[index];
|
|
15
|
+
if (CODEX_HEADER_RE.test(line.text.trimStart()))
|
|
16
|
+
continue;
|
|
17
|
+
if (isAsciiMenuSelection(lines, index, footerIndex))
|
|
18
|
+
return "unknown";
|
|
19
|
+
const markerCol = markerColumn(line);
|
|
20
|
+
if (markerCol === undefined)
|
|
21
|
+
continue;
|
|
22
|
+
const overlay = overlayScope(lines, index, footerIndex);
|
|
23
|
+
const relativeIndex = index - overlay.start;
|
|
24
|
+
const safetyLines = lines.slice(overlay.start, footerIndex + 1);
|
|
25
|
+
if (hasPermissionPrompt(safetyLines) ||
|
|
26
|
+
isStructuredMenuAt(overlay.lines, relativeIndex, overlay.lines.length, CODEX_MENU_MARKERS) ||
|
|
27
|
+
isCandidateFooterMenuOption(lines, index, footerIndex)) {
|
|
28
|
+
return "unknown";
|
|
29
|
+
}
|
|
30
|
+
return contentStateAfterMarker(lines, index, markerCol, footerIndex);
|
|
31
|
+
}
|
|
32
|
+
return "unknown";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function markerColumn(line) {
|
|
36
|
+
for (const cell of line.cells) {
|
|
37
|
+
if (cell.width === 0 || !/\S/u.test(cell.chars))
|
|
38
|
+
continue;
|
|
39
|
+
return cell.chars === CODEX_PROMPT_MARKER ? cell.col : undefined;
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
function isAsciiMenuSelection(lines, index, footerIndex) {
|
|
44
|
+
const line = lines[index];
|
|
45
|
+
if (CODEX_HEADER_RE.test(line.text.trimStart()))
|
|
46
|
+
return false;
|
|
47
|
+
if (!/^(\s*)>(?!_)(?:\s|\S)/u.test(line.text))
|
|
48
|
+
return false;
|
|
49
|
+
const overlay = overlayScope(lines, index, footerIndex);
|
|
50
|
+
const safetyLines = lines.slice(overlay.start, footerIndex + 1);
|
|
51
|
+
return hasPermissionPrompt(safetyLines) ||
|
|
52
|
+
isStructuredMenuAt(overlay.lines, index - overlay.start, overlay.lines.length, CODEX_MENU_MARKERS) ||
|
|
53
|
+
isCandidateFooterMenuOption(lines, index, footerIndex);
|
|
54
|
+
}
|
|
55
|
+
function footerBoundary(lines) {
|
|
56
|
+
for (let index = lines.length - 1; index >= 0; index--) {
|
|
57
|
+
const line = lines[index];
|
|
58
|
+
if (!hasVisibleContent(line))
|
|
59
|
+
continue;
|
|
60
|
+
if (line.isWrapped)
|
|
61
|
+
return undefined;
|
|
62
|
+
if (CODEX_HEADER_RE.test(line.text.trimStart()))
|
|
63
|
+
return undefined;
|
|
64
|
+
if (markerColumn(line) !== undefined)
|
|
65
|
+
return undefined;
|
|
66
|
+
if (/^(\s*)>(?!_)(?:\s|\S)/u.test(line.text))
|
|
67
|
+
return undefined;
|
|
68
|
+
return index;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
function overlayScope(lines, markerIndex, footerIndex) {
|
|
73
|
+
let start = markerIndex;
|
|
74
|
+
for (let index = markerIndex - 1; index >= 0; index--) {
|
|
75
|
+
const text = lines[index].text.trim();
|
|
76
|
+
if (text.length === 0 || CODEX_HEADER_RE.test(text))
|
|
77
|
+
break;
|
|
78
|
+
if (markerIndex - index > 3)
|
|
79
|
+
break;
|
|
80
|
+
start = index;
|
|
81
|
+
}
|
|
82
|
+
return { start, lines: lines.slice(start, footerIndex) };
|
|
83
|
+
}
|
|
84
|
+
function isCandidateFooterMenuOption(lines, markerIndex, footerIndex) {
|
|
85
|
+
if (footerIndex !== markerIndex + 1)
|
|
86
|
+
return false;
|
|
87
|
+
const active = parseMenuMarkerLine(lines[markerIndex]);
|
|
88
|
+
if (!active)
|
|
89
|
+
return false;
|
|
90
|
+
if (!isIndentedFooterOption(lines[footerIndex].text, active.indent))
|
|
91
|
+
return false;
|
|
92
|
+
return active.marker === ">" || hasInverseSelectionStyle(lines[markerIndex]);
|
|
93
|
+
}
|
|
94
|
+
function parseMenuMarkerLine(line) {
|
|
95
|
+
const match = /^(\s*)(\S)/u.exec(line.text);
|
|
96
|
+
if (!match)
|
|
97
|
+
return undefined;
|
|
98
|
+
const marker = match[2];
|
|
99
|
+
if (!CODEX_MENU_MARKER_SET.includes(marker))
|
|
100
|
+
return undefined;
|
|
101
|
+
return { indent: match[1].length, marker };
|
|
102
|
+
}
|
|
103
|
+
function isIndentedFooterOption(text, markerIndent) {
|
|
104
|
+
if (text.trim().length === 0)
|
|
105
|
+
return false;
|
|
106
|
+
if (parseMenuMarkerText(text))
|
|
107
|
+
return false;
|
|
108
|
+
const match = /^(\s+)\S/u.exec(text);
|
|
109
|
+
return match !== null && match[1].length >= markerIndent + 2;
|
|
110
|
+
}
|
|
111
|
+
function parseMenuMarkerText(text) {
|
|
112
|
+
const match = /^(\s*)(\S)/u.exec(text);
|
|
113
|
+
return match !== null && CODEX_MENU_MARKER_SET.includes(match[2]);
|
|
114
|
+
}
|
|
115
|
+
function contentStateAfterMarker(lines, markerIndex, markerCol, statusIndex) {
|
|
116
|
+
for (const cell of lines[markerIndex].cells) {
|
|
117
|
+
if (cell.col <= markerCol || cell.width === 0 || !/\S/u.test(cell.chars)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (!cell.isDim)
|
|
121
|
+
return "filled";
|
|
122
|
+
}
|
|
123
|
+
for (let index = markerIndex + 1; index < statusIndex; index++) {
|
|
124
|
+
const line = lines[index];
|
|
125
|
+
if (line.cells.some((cell) => hasNonDimVisibleContent(cell))) {
|
|
126
|
+
return "filled";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return "empty";
|
|
130
|
+
}
|
|
131
|
+
function hasVisibleContent(line) {
|
|
132
|
+
return line.cells.some((cell) => cell.width !== 0 && /\S/u.test(cell.chars));
|
|
133
|
+
}
|
|
134
|
+
function hasNonDimVisibleContent(cell) {
|
|
135
|
+
return hasNonDimVisibleCell(cell);
|
|
136
|
+
}
|
|
137
|
+
function hasInverseSelectionStyle(line) {
|
|
138
|
+
const visible = line.cells.filter((cell) => cell.width !== 0 && cell.chars.trim().length > 0);
|
|
139
|
+
if (visible.length === 0)
|
|
140
|
+
return false;
|
|
141
|
+
return visible.some((cell) => cell.isInverse);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../../src/providers/codex/composer.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,16 +11,14 @@ import type { AttachedActivator, PlanModeActivator } from "../types.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export declare class CodexPlanModeActivator implements PlanModeActivator {
|
|
13
13
|
private readonly pollMs;
|
|
14
|
-
private readonly submitDelayMs;
|
|
15
14
|
private readonly timeoutMs;
|
|
16
|
-
private readonly
|
|
17
|
-
private readonly
|
|
15
|
+
private readonly sendPollMs;
|
|
16
|
+
private readonly sendRetryMs;
|
|
18
17
|
constructor(opts?: {
|
|
19
18
|
pollMs?: number;
|
|
20
|
-
submitDelayMs?: number;
|
|
21
19
|
timeoutMs?: number;
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
sendPollMs?: number;
|
|
21
|
+
sendRetryMs?: number;
|
|
24
22
|
});
|
|
25
23
|
attach(handle: PtyHandle): AttachedActivator;
|
|
26
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-mode-activator.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/plan-mode-activator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan-mode-activator.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/plan-mode-activator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwCxE;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAErC,IAAI,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IAOD,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,iBAAiB;CAS7C"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ANSI_RE, SHIFT_TAB } from "../../ansi.js";
|
|
2
2
|
import { abortableSleep, throwIfAborted } from "../../session/locator.js";
|
|
3
|
-
import {
|
|
3
|
+
import { sendComposerText } from "../../terminal/paste-submit.js";
|
|
4
4
|
import { VirtualTerminal } from "../../terminal/virtual-terminal.js";
|
|
5
|
+
import { CodexComposerInspector } from "./composer.js";
|
|
5
6
|
/**
|
|
6
7
|
* Codex 0.130 renders the active mode as a compact status-line suffix
|
|
7
8
|
* (`... Ready ... Plan mode`). Older builds rendered a longer hint. Match
|
|
@@ -15,7 +16,6 @@ const PLAN_MODE_HINT_RE = /\bshift\+tab to cycle\b/i;
|
|
|
15
16
|
const PERMISSION_PROMPT_RE = /\b(?:do you trust|trust (?:this|the) (?:folder|workspace|directory|project|files)|workspace trust)\b/i;
|
|
16
17
|
const PERMISSION_OPTION_RE = /\b(?:yes,?\s*(?:proceed|continue|trust)|no,?\s*(?:exit|cancel|go back))\b/i;
|
|
17
18
|
const DEFAULT_POLL_MS = 750;
|
|
18
|
-
const DEFAULT_SUBMIT_DELAY_MS = 250;
|
|
19
19
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
20
20
|
const BUFFER_CAPACITY = 8 * 1024;
|
|
21
21
|
const VT_COLS = 512;
|
|
@@ -48,29 +48,27 @@ function isCodexStarted(lines) {
|
|
|
48
48
|
*/
|
|
49
49
|
export class CodexPlanModeActivator {
|
|
50
50
|
pollMs;
|
|
51
|
-
submitDelayMs;
|
|
52
51
|
timeoutMs;
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
sendPollMs;
|
|
53
|
+
sendRetryMs;
|
|
55
54
|
constructor(opts) {
|
|
56
55
|
this.pollMs = opts?.pollMs ?? DEFAULT_POLL_MS;
|
|
57
|
-
this.submitDelayMs = opts?.submitDelayMs ?? DEFAULT_SUBMIT_DELAY_MS;
|
|
58
56
|
this.timeoutMs = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
57
|
+
this.sendPollMs = opts?.sendPollMs;
|
|
58
|
+
this.sendRetryMs = opts?.sendRetryMs;
|
|
61
59
|
}
|
|
62
60
|
attach(handle) {
|
|
63
|
-
return new CodexAttachedActivator(handle, this.pollMs, this.
|
|
61
|
+
return new CodexAttachedActivator(handle, this.pollMs, this.timeoutMs, this.sendPollMs, this.sendRetryMs);
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
64
|
class CodexAttachedActivator {
|
|
67
65
|
handle;
|
|
68
66
|
pollMs;
|
|
69
|
-
submitDelayMs;
|
|
70
67
|
timeoutMs;
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
sendPollMs;
|
|
69
|
+
sendRetryMs;
|
|
73
70
|
vt = new VirtualTerminal(VT_COLS, VT_ROWS);
|
|
71
|
+
composer = new CodexComposerInspector();
|
|
74
72
|
buffer = "";
|
|
75
73
|
detected = false;
|
|
76
74
|
codexStarted = false;
|
|
@@ -78,13 +76,12 @@ class CodexAttachedActivator {
|
|
|
78
76
|
readyCallbackError;
|
|
79
77
|
readyCallback;
|
|
80
78
|
active = true;
|
|
81
|
-
constructor(handle, pollMs,
|
|
79
|
+
constructor(handle, pollMs, timeoutMs, sendPollMs, sendRetryMs) {
|
|
82
80
|
this.handle = handle;
|
|
83
81
|
this.pollMs = pollMs;
|
|
84
|
-
this.submitDelayMs = submitDelayMs;
|
|
85
82
|
this.timeoutMs = timeoutMs;
|
|
86
|
-
this.
|
|
87
|
-
this.
|
|
83
|
+
this.sendPollMs = sendPollMs;
|
|
84
|
+
this.sendRetryMs = sendRetryMs;
|
|
88
85
|
handle.onData((data) => {
|
|
89
86
|
if (!this.active)
|
|
90
87
|
return;
|
|
@@ -140,12 +137,10 @@ class CodexAttachedActivator {
|
|
|
140
137
|
}
|
|
141
138
|
this.throwReadyCallbackError();
|
|
142
139
|
throwIfAborted(opts.signal);
|
|
143
|
-
|
|
144
|
-
await pasteDetectSubmit({ vt: this.vt, pty: this.handle }, prompt, home, {
|
|
140
|
+
await sendComposerText({ vt: this.vt, pty: this.handle }, prompt, this.composer, {
|
|
145
141
|
signal: opts.signal,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
detectSettleMs: this.detectSettleMs,
|
|
142
|
+
pollMs: this.sendPollMs,
|
|
143
|
+
retryMs: this.sendRetryMs,
|
|
149
144
|
});
|
|
150
145
|
}
|
|
151
146
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-mode-activator.js","sourceRoot":"","sources":["../../../src/providers/codex/plan-mode-activator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"plan-mode-activator.js","sourceRoot":"","sources":["../../../src/providers/codex/plan-mode-activator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { PlanModeConfig, PlanModeActivator, ProviderStrategy, SessionHandler, BuildArgsOpts, CompletionDetectorOptions, ForkSubmitFloorPolicy, OptionCatalog, SimplifierPromptOptions, SubagentOptionCatalog } from "../types.js";
|
|
1
|
+
import type { CancelSequence, PlanModeConfig, PlanModeActivator, ProviderStrategy, SessionHandler, BuildArgsOpts, CompletionDetectorOptions, ForkSubmitFloorPolicy, OptionCatalog, SimplifierPromptOptions, SubagentOptionCatalog, LiveSessionHandler } from "../types.js";
|
|
2
2
|
import type { ForkHandler } from "../fork.js";
|
|
3
3
|
import { CodexCompletionStrategy } from "./completion.js";
|
|
4
|
+
import { CodexComposerInspector } from "./composer.js";
|
|
4
5
|
export declare const CODEX_ALTERNATE_SCREEN_ARGS: readonly ["-c", "tui.alternate_screen=always"];
|
|
5
6
|
export declare const CODEX_NO_AUTO_UPDATE_ARGS: readonly ["-c", "check_for_update_on_startup=false"];
|
|
6
7
|
export declare class CodexStrategy implements ProviderStrategy {
|
|
@@ -8,9 +9,12 @@ export declare class CodexStrategy implements ProviderStrategy {
|
|
|
8
9
|
readonly displayName = "Codex CLI";
|
|
9
10
|
readonly command = "codex";
|
|
10
11
|
readonly exitSignal = "\u0003";
|
|
12
|
+
readonly cancelSequence: CancelSequence;
|
|
11
13
|
readonly npmUpdateVersionPolicy = "stable-only";
|
|
12
14
|
readonly session: SessionHandler;
|
|
15
|
+
readonly live: LiveSessionHandler;
|
|
13
16
|
readonly fork: ForkHandler;
|
|
17
|
+
readonly composer: CodexComposerInspector;
|
|
14
18
|
readonly forkSubmitFloor: ForkSubmitFloorPolicy;
|
|
15
19
|
readonly simplifierSubagentType = "explorer";
|
|
16
20
|
version: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAIL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAWzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,eAAO,MAAM,2BAA2B,gDAAiD,CAAC;AAC1F,eAAO,MAAM,yBAAyB,sDAAuD,CAAC;AA0B9F,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAqC;IAC5E,QAAQ,CAAC,sBAAsB,iBAAiB;IAChD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA6B;IAC7D,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAuC;IACxE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAA0B;IACpD,QAAQ,CAAC,QAAQ,yBAAgC;IACjD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAsB;IACrE,QAAQ,CAAC,sBAAsB,cAAc;IAC7C,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAG/B;IACF,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAgC;IAC7E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAS7B;IACF,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAI7C;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkCjE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM;IAOvD,cAAc,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,uBAAuB;IAUzE,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;CAG3B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefaultLiveSessionHandler } from "../live.js";
|
|
1
2
|
import { INQUIRY_ONLY_INSTRUCTION } from "../fork.js";
|
|
2
3
|
import { SESSION_FILE_WAIT_DEFAULT_MS } from "../../session/locator.js";
|
|
3
4
|
import { flagIf } from "../types.js";
|
|
@@ -8,6 +9,7 @@ import { buildCodexDeveloperInstructionsArgs } from "./config.js";
|
|
|
8
9
|
import { ensureCodexTrust } from "./trust.js";
|
|
9
10
|
import { buildSimplifierPrompt } from "../../agents/simplifiers/prompts.js";
|
|
10
11
|
import { versionGte } from "../version.js";
|
|
12
|
+
import { CodexComposerInspector } from "./composer.js";
|
|
11
13
|
export const CODEX_ALTERNATE_SCREEN_ARGS = ["-c", "tui.alternate_screen=always"];
|
|
12
14
|
export const CODEX_NO_AUTO_UPDATE_ARGS = ["-c", "check_for_update_on_startup=false"];
|
|
13
15
|
const DEFAULT_FORK_LOCATE_POLL_MS = 500;
|
|
@@ -39,9 +41,12 @@ export class CodexStrategy {
|
|
|
39
41
|
displayName = "Codex CLI";
|
|
40
42
|
command = "codex";
|
|
41
43
|
exitSignal = "\x03";
|
|
44
|
+
cancelSequence = { inputs: [Buffer.from([0x1b])] };
|
|
42
45
|
npmUpdateVersionPolicy = "stable-only";
|
|
43
46
|
session = new CodexSessionHandler();
|
|
47
|
+
live = new DefaultLiveSessionHandler(this);
|
|
44
48
|
fork = new CodexForkHandler();
|
|
49
|
+
composer = new CodexComposerInspector();
|
|
45
50
|
forkSubmitFloor = { from: "source" };
|
|
46
51
|
simplifierSubagentType = "explorer";
|
|
47
52
|
version = undefined;
|
|
@@ -82,7 +87,7 @@ export class CodexStrategy {
|
|
|
82
87
|
// Resume existing session. In plan mode, omit the positional prompt
|
|
83
88
|
// so the runner's `planModeActivator` can deliver it via Shift+Tab +
|
|
84
89
|
// bracketed paste after `codex resume <id>` re-attaches to the TUI.
|
|
85
|
-
if (opts.planMode) {
|
|
90
|
+
if (opts.planMode || prompt.length === 0) {
|
|
86
91
|
return [...optionFlags, "resume", opts.resumeSessionId];
|
|
87
92
|
}
|
|
88
93
|
return [...optionFlags, "resume", opts.resumeSessionId, prompt];
|
|
@@ -153,8 +158,8 @@ class CodexForkHandler {
|
|
|
153
158
|
return undefined;
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
|
-
turnComplete(lines) {
|
|
157
|
-
return isCodexTurnComplete(lines);
|
|
161
|
+
turnComplete(lines, latestSubmitIndex = 0) {
|
|
162
|
+
return isCodexTurnComplete(lines.slice(latestSubmitIndex));
|
|
158
163
|
}
|
|
159
164
|
latestSubmitIndex(lines) {
|
|
160
165
|
return latestCodexSubmitIndex(lines);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ComposerState } from "./types.js";
|
|
2
|
+
import { type RenderedLine } from "../terminal/paste-submit.js";
|
|
3
|
+
import type { VirtualTerminal } from "../terminal/virtual-terminal.js";
|
|
4
|
+
export declare function inspectSeparatorBoundedComposer(vt: Pick<VirtualTerminal, "buffer" | "rows" | "cols">): ComposerState;
|
|
5
|
+
export declare function inspectHalfBlockBoundedComposer(vt: Pick<VirtualTerminal, "buffer" | "rows" | "cols">): ComposerState;
|
|
6
|
+
export declare function hasPermissionPrompt(lines: readonly RenderedLine[]): boolean;
|
|
7
|
+
export declare function isStructuredMenuAt(lines: readonly RenderedLine[], markerIndex: number, endIndex?: number, markers?: readonly string[]): boolean;
|
|
8
|
+
export declare function hasNonDimVisibleCell(cell: RenderedLine["cells"][number]): boolean;
|
|
9
|
+
//# sourceMappingURL=composer-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer-utils.d.ts","sourceRoot":"","sources":["../../src/providers/composer-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAsBvE,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,GACpD,aAAa,CAoBf;AAED,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,GACpD,aAAa,CA4Bf;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAM3E;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,SAAe,EACvB,OAAO,GAAE,SAAS,MAAM,EAAmB,GAC1C,OAAO,CAWT;AAiFD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAEjF"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { renderedLines } from "../terminal/paste-submit.js";
|
|
2
|
+
const PROMPT_MARKERS = [">", "\u276f"];
|
|
3
|
+
const STATUS_RE = /^(?:working|choreographing|ready|context|thinking|running)\b/i;
|
|
4
|
+
const TRUST_PROMPT_RE = /\b(?:do you trust|trust (?:this|the) (?:folder|workspace|directory|project|files)|workspace trust)\b/i;
|
|
5
|
+
const YES_OPTION_RE = /\b(?:yes,?\s*(?:proceed|continue|trust|approve|allow)|allow)\b/i;
|
|
6
|
+
const NO_OPTION_RE = /\b(?:no,?\s*(?:exit|cancel|go back|deny)|deny)\b/i;
|
|
7
|
+
const HORIZONTAL_CHARS = new Set(Array.from("-\u2500\u2501\u2550\u254c\u254d\u2504\u2505\u2508\u2509"));
|
|
8
|
+
const RULE_CHARS = new Set([
|
|
9
|
+
...HORIZONTAL_CHARS,
|
|
10
|
+
...Array.from("\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\u2554\u2557\u255a\u255d\u2560\u2563\u2566\u2569\u256c"),
|
|
11
|
+
]);
|
|
12
|
+
const HALF_BLOCK_TOP_LEFT = "\u257b";
|
|
13
|
+
const HALF_BLOCK_BOTTOM_LEFT = "\u2579";
|
|
14
|
+
const HALF_BLOCK_TOP_RULE = "\u2584";
|
|
15
|
+
const HALF_BLOCK_BOTTOM_RULE = "\u2580";
|
|
16
|
+
const HALF_BLOCK_LEFT_EDGE = "\u2503";
|
|
17
|
+
export function inspectSeparatorBoundedComposer(vt) {
|
|
18
|
+
const lines = renderedLines(vt);
|
|
19
|
+
for (let lower = lines.length - 1; lower >= 0; lower--) {
|
|
20
|
+
if (!isHorizontalRule(lines[lower], vt.cols))
|
|
21
|
+
continue;
|
|
22
|
+
for (let upper = lower - 1; upper >= 0; upper--) {
|
|
23
|
+
if (!isHorizontalRule(lines[upper], vt.cols))
|
|
24
|
+
continue;
|
|
25
|
+
const region = lines.slice(upper + 1, lower);
|
|
26
|
+
const markerIndex = findPromptMarkerIndex(region, PROMPT_MARKERS);
|
|
27
|
+
if (markerIndex !== undefined) {
|
|
28
|
+
if (hasPermissionPrompt(region) || isStructuredMenuAt(region, markerIndex)) {
|
|
29
|
+
return "unknown";
|
|
30
|
+
}
|
|
31
|
+
return stateForPromptRegion(region, markerIndex, PROMPT_MARKERS);
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return "unknown";
|
|
37
|
+
}
|
|
38
|
+
export function inspectHalfBlockBoundedComposer(vt) {
|
|
39
|
+
const lines = renderedLines(vt);
|
|
40
|
+
for (let lower = lines.length - 1; lower >= 0; lower--) {
|
|
41
|
+
if (!isHalfBlockBorder(lines[lower], vt.cols, HALF_BLOCK_BOTTOM_LEFT, HALF_BLOCK_BOTTOM_RULE)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
for (let upper = lower - 1; upper >= 0; upper--) {
|
|
45
|
+
if (!isHalfBlockBorder(lines[upper], vt.cols, HALF_BLOCK_TOP_LEFT, HALF_BLOCK_TOP_RULE)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const region = lines.slice(upper + 1, lower);
|
|
49
|
+
let foundContentRow = false;
|
|
50
|
+
let filled = false;
|
|
51
|
+
for (const line of region) {
|
|
52
|
+
if (!hasVisibleContent(line))
|
|
53
|
+
continue;
|
|
54
|
+
const edgeCol = halfBlockLeftEdgeColumn(line);
|
|
55
|
+
if (edgeCol === undefined)
|
|
56
|
+
return "unknown";
|
|
57
|
+
foundContentRow = true;
|
|
58
|
+
if (hasNonDimVisibleContent(line, edgeCol))
|
|
59
|
+
filled = true;
|
|
60
|
+
}
|
|
61
|
+
if (!foundContentRow)
|
|
62
|
+
return "unknown";
|
|
63
|
+
return filled ? "filled" : "empty";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return "unknown";
|
|
67
|
+
}
|
|
68
|
+
export function hasPermissionPrompt(lines) {
|
|
69
|
+
const text = lines.map((line) => line.text).join("\n");
|
|
70
|
+
const hasYesOption = YES_OPTION_RE.test(text);
|
|
71
|
+
const hasNoOption = NO_OPTION_RE.test(text);
|
|
72
|
+
return (TRUST_PROMPT_RE.test(text) && (hasYesOption || hasNoOption)) ||
|
|
73
|
+
(hasYesOption && hasNoOption);
|
|
74
|
+
}
|
|
75
|
+
export function isStructuredMenuAt(lines, markerIndex, endIndex = lines.length, markers = PROMPT_MARKERS) {
|
|
76
|
+
const active = parseMarkedLine(lines[markerIndex]?.text ?? "", markers);
|
|
77
|
+
if (!active)
|
|
78
|
+
return false;
|
|
79
|
+
const optionRows = lines
|
|
80
|
+
.slice(markerIndex + 1, endIndex)
|
|
81
|
+
.filter((line) => isIndentedOptionLine(line.text, active.indent, markers));
|
|
82
|
+
if (optionRows.length === 0)
|
|
83
|
+
return false;
|
|
84
|
+
if (hasStructuralTitleBefore(lines, markerIndex, markers))
|
|
85
|
+
return true;
|
|
86
|
+
return hasMenuStyle(lines[markerIndex]) || optionRows.some(hasMenuStyle);
|
|
87
|
+
}
|
|
88
|
+
function parseMarkedLine(text, markers) {
|
|
89
|
+
const match = /^(\s*)(\S)(.*)$/u.exec(text);
|
|
90
|
+
if (!match)
|
|
91
|
+
return undefined;
|
|
92
|
+
const marker = match[2];
|
|
93
|
+
if (!markers.includes(marker))
|
|
94
|
+
return undefined;
|
|
95
|
+
return { indent: match[1].length, marker, after: match[3] ?? "" };
|
|
96
|
+
}
|
|
97
|
+
function findPromptMarkerIndex(lines, markers) {
|
|
98
|
+
for (let index = lines.length - 1; index >= 0; index--) {
|
|
99
|
+
if (parseMarkedLine(lines[index].text, markers))
|
|
100
|
+
return index;
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
function stateForPromptRegion(lines, markerIndex, markers) {
|
|
105
|
+
const parsed = parseMarkedLine(lines[markerIndex]?.text ?? "", markers);
|
|
106
|
+
if (!parsed)
|
|
107
|
+
return "unknown";
|
|
108
|
+
const markerCol = promptMarkerColumn(lines[markerIndex], markers);
|
|
109
|
+
if (markerCol === undefined)
|
|
110
|
+
return "unknown";
|
|
111
|
+
if (hasNonDimVisibleContent(lines[markerIndex], markerCol))
|
|
112
|
+
return "filled";
|
|
113
|
+
return lines
|
|
114
|
+
.slice(markerIndex + 1)
|
|
115
|
+
.filter((line) => !isStatusLine(line.text))
|
|
116
|
+
.some((line) => hasNonDimVisibleContent(line)) ? "filled" : "empty";
|
|
117
|
+
}
|
|
118
|
+
function hasStructuralTitleBefore(lines, markerIndex, markers) {
|
|
119
|
+
return lines
|
|
120
|
+
.slice(0, markerIndex)
|
|
121
|
+
.some((line) => {
|
|
122
|
+
const text = line.text;
|
|
123
|
+
if (text.trim().length === 0 || isStatusLine(text))
|
|
124
|
+
return false;
|
|
125
|
+
return parseMarkedLine(text, markers) === undefined;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function isIndentedOptionLine(text, markerIndent, markers) {
|
|
129
|
+
if (text.trim().length === 0 || isStatusLine(text))
|
|
130
|
+
return false;
|
|
131
|
+
if (parseMarkedLine(text, markers))
|
|
132
|
+
return false;
|
|
133
|
+
const match = /^(\s+)\S/u.exec(text);
|
|
134
|
+
return match !== null && match[1].length >= markerIndent + 2;
|
|
135
|
+
}
|
|
136
|
+
function isStatusLine(text) {
|
|
137
|
+
const trimmed = text.trimStart();
|
|
138
|
+
if (STATUS_RE.test(trimmed))
|
|
139
|
+
return true;
|
|
140
|
+
return /^\S\s+/.test(trimmed) && STATUS_RE.test(trimmed.slice([...trimmed][0].length).trimStart());
|
|
141
|
+
}
|
|
142
|
+
function promptMarkerColumn(line, markers) {
|
|
143
|
+
for (const cell of line.cells) {
|
|
144
|
+
if (cell.width === 0 || !/\S/u.test(cell.chars))
|
|
145
|
+
continue;
|
|
146
|
+
return markers.includes(cell.chars) ? cell.col : undefined;
|
|
147
|
+
}
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
export function hasNonDimVisibleCell(cell) {
|
|
151
|
+
return cell.width !== 0 && !cell.isDim && /\S/u.test(cell.chars);
|
|
152
|
+
}
|
|
153
|
+
function hasNonDimVisibleContent(line, afterCol = -1) {
|
|
154
|
+
return line.cells.some((cell) => cell.col > afterCol &&
|
|
155
|
+
hasNonDimVisibleCell(cell));
|
|
156
|
+
}
|
|
157
|
+
function hasVisibleContent(line) {
|
|
158
|
+
return line.cells.some((cell) => cell.width !== 0 && /\S/u.test(cell.chars));
|
|
159
|
+
}
|
|
160
|
+
function halfBlockLeftEdgeColumn(line) {
|
|
161
|
+
for (const cell of line.cells) {
|
|
162
|
+
if (cell.width === 0 || !/\S/u.test(cell.chars))
|
|
163
|
+
continue;
|
|
164
|
+
return cell.chars === HALF_BLOCK_LEFT_EDGE ? cell.col : undefined;
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
function hasMenuStyle(line) {
|
|
169
|
+
const visible = line.cells.filter((cell) => cell.width !== 0 && cell.chars.trim().length > 0);
|
|
170
|
+
if (visible.length === 0)
|
|
171
|
+
return false;
|
|
172
|
+
return visible.some((cell) => cell.isInverse || cell.isDim) ||
|
|
173
|
+
visible.filter((cell) => cell.isBold).length >= Math.max(1, Math.ceil(visible.length / 2));
|
|
174
|
+
}
|
|
175
|
+
function isHorizontalRule(line, cols) {
|
|
176
|
+
const cells = line.cells.filter((cell) => cell.width !== 0);
|
|
177
|
+
if (cells.length === 0)
|
|
178
|
+
return false;
|
|
179
|
+
const requiredRuleCells = Math.max(3, cols - 2);
|
|
180
|
+
let ruleCells = 0;
|
|
181
|
+
let horizontal = 0;
|
|
182
|
+
for (const cell of cells) {
|
|
183
|
+
if (RULE_CHARS.has(cell.chars)) {
|
|
184
|
+
ruleCells++;
|
|
185
|
+
if (HORIZONTAL_CHARS.has(cell.chars))
|
|
186
|
+
horizontal++;
|
|
187
|
+
}
|
|
188
|
+
else if (cell.chars.trim().length > 0) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return ruleCells >= requiredRuleCells
|
|
193
|
+
&& horizontal >= Math.max(3, Math.floor(ruleCells * 0.5));
|
|
194
|
+
}
|
|
195
|
+
function isHalfBlockBorder(line, cols, leftGlyph, ruleGlyph) {
|
|
196
|
+
const cells = line.cells.filter((cell) => cell.width !== 0);
|
|
197
|
+
if (cells.length === 0)
|
|
198
|
+
return false;
|
|
199
|
+
const requiredRuleCells = Math.max(3, cols - 2);
|
|
200
|
+
let sawLeft = false;
|
|
201
|
+
let ruleCells = 0;
|
|
202
|
+
for (const cell of cells) {
|
|
203
|
+
if (cell.chars.trim().length === 0)
|
|
204
|
+
continue;
|
|
205
|
+
if (!sawLeft) {
|
|
206
|
+
if (cell.chars !== leftGlyph)
|
|
207
|
+
return false;
|
|
208
|
+
sawLeft = true;
|
|
209
|
+
ruleCells++;
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
if (cell.chars !== ruleGlyph)
|
|
213
|
+
return false;
|
|
214
|
+
ruleCells++;
|
|
215
|
+
}
|
|
216
|
+
return sawLeft && ruleCells >= requiredRuleCells;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=composer-utils.js.map
|