@sagmans/dsh-tui 0.2.0 → 0.3.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/README.md +126 -21
- package/lib/agent/model.d.ts +26 -0
- package/lib/agent/model.d.ts.map +1 -1
- package/lib/agent/model.js +41 -0
- package/lib/agent/model.js.map +1 -1
- package/lib/agent/status.d.ts +10 -0
- package/lib/agent/status.d.ts.map +1 -1
- package/lib/agent/status.js +2 -0
- package/lib/agent/status.js.map +1 -1
- package/lib/cards.d.ts +1 -1
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +4 -3
- package/lib/cards.js.map +1 -1
- package/lib/gates.d.ts +145 -2
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +335 -40
- package/lib/gates.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +383 -102
- package/lib/index.js.map +1 -1
- package/lib/input/actions.d.ts +136 -0
- package/lib/input/actions.d.ts.map +1 -0
- package/lib/input/actions.js +740 -0
- package/lib/input/actions.js.map +1 -0
- package/lib/input/keymap-settings.d.ts +21 -0
- package/lib/input/keymap-settings.d.ts.map +1 -0
- package/lib/input/keymap-settings.js +28 -0
- package/lib/input/keymap-settings.js.map +1 -0
- package/lib/input/keymap.d.ts +91 -0
- package/lib/input/keymap.d.ts.map +1 -0
- package/lib/input/keymap.js +170 -0
- package/lib/input/keymap.js.map +1 -0
- package/lib/input/match.d.ts +10 -0
- package/lib/input/match.d.ts.map +1 -0
- package/lib/input/match.js +83 -0
- package/lib/input/match.js.map +1 -0
- package/lib/input/submission.d.ts +6 -1
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js +6 -2
- package/lib/input/submission.js.map +1 -1
- package/lib/input.d.ts +17 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +27 -0
- package/lib/input.js.map +1 -0
- package/lib/keys-command.d.ts +16 -0
- package/lib/keys-command.d.ts.map +1 -0
- package/lib/keys-command.js +60 -0
- package/lib/keys-command.js.map +1 -0
- package/lib/queue.d.ts +6 -0
- package/lib/queue.d.ts.map +1 -0
- package/lib/queue.js +68 -0
- package/lib/queue.js.map +1 -0
- package/lib/settings-notice.d.ts +19 -0
- package/lib/settings-notice.d.ts.map +1 -0
- package/lib/settings-notice.js +30 -0
- package/lib/settings-notice.js.map +1 -0
- package/lib/theme-settings.d.ts +43 -8
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +66 -3
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +4 -4
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +31 -5
- package/lib/theme-tokens.js.map +1 -1
- package/lib/ui/editor.d.ts +18 -1
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +80 -19
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/frame.d.ts +54 -0
- package/lib/ui/frame.d.ts.map +1 -0
- package/lib/ui/frame.js +79 -0
- package/lib/ui/frame.js.map +1 -0
- package/lib/ui/gate-input.d.ts +20 -0
- package/lib/ui/gate-input.d.ts.map +1 -0
- package/lib/ui/gate-input.js +96 -0
- package/lib/ui/gate-input.js.map +1 -0
- package/lib/ui/markdown.d.ts +11 -2
- package/lib/ui/markdown.d.ts.map +1 -1
- package/lib/ui/markdown.js +25 -6
- package/lib/ui/markdown.js.map +1 -1
- package/lib/ui/mermaid.d.ts +44 -0
- package/lib/ui/mermaid.d.ts.map +1 -0
- package/lib/ui/mermaid.js +178 -0
- package/lib/ui/mermaid.js.map +1 -0
- package/lib/ui/picker.d.ts +30 -8
- package/lib/ui/picker.d.ts.map +1 -1
- package/lib/ui/picker.js +63 -23
- package/lib/ui/picker.js.map +1 -1
- package/lib/ui/prompt.d.ts +30 -0
- package/lib/ui/prompt.d.ts.map +1 -0
- package/lib/ui/prompt.js +45 -0
- package/lib/ui/prompt.js.map +1 -0
- package/lib/ui/queue.d.ts +24 -0
- package/lib/ui/queue.d.ts.map +1 -0
- package/lib/ui/queue.js +57 -0
- package/lib/ui/queue.js.map +1 -0
- package/lib/ui/status.d.ts +4 -0
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +8 -0
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/view.d.ts +22 -2
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +84 -24
- package/lib/ui/view.js.map +1 -1
- package/lib/work.d.ts +48 -0
- package/lib/work.d.ts.map +1 -1
- package/lib/work.js +44 -0
- package/lib/work.js.map +1 -1
- package/package.json +3 -2
package/lib/gates.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Keymap } from './input/actions.ts';
|
|
1
2
|
/** The outcome vocabulary the approval seam accepts from an answerer. */
|
|
2
3
|
export type ApprovalOutcome = 'allowed-once' | 'rejected' | 'cancelled';
|
|
3
4
|
/** How a pending gate presents itself, independent of how it is drawn. */
|
|
@@ -5,9 +6,54 @@ export interface GateCard {
|
|
|
5
6
|
readonly kind: 'approval' | 'question';
|
|
6
7
|
readonly title: string;
|
|
7
8
|
readonly detail: readonly string[];
|
|
9
|
+
/**
|
|
10
|
+
* The number the first drawn option answers for. A list longer than the
|
|
11
|
+
* screen shows a window of itself, and a window that restarts at one every
|
|
12
|
+
* scroll hides where the reader is and contradicts the digits that pick by
|
|
13
|
+
* that same number.
|
|
14
|
+
*/
|
|
15
|
+
readonly optionOffset: number;
|
|
8
16
|
readonly options: readonly GateOption[];
|
|
17
|
+
/**
|
|
18
|
+
* The row that answers with typed text. A question with no options is answered
|
|
19
|
+
* by typing anyway, so it has no such row to draw.
|
|
20
|
+
*/
|
|
21
|
+
readonly custom: GateCustomRow | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* The editor the answer is written in, drawn under the row that fills it.
|
|
24
|
+
*
|
|
25
|
+
* A question says nothing about its answer until someone writes one, so the
|
|
26
|
+
* rows come from the surface's own editor rather than from text composed
|
|
27
|
+
* here: the reader gets the cursor movement, deletion, undo, and paste the
|
|
28
|
+
* prompt bar already has.
|
|
29
|
+
*/
|
|
30
|
+
readonly answerInput: GateInput | undefined;
|
|
9
31
|
readonly hint: string;
|
|
10
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* The editor a question collects typed text with.
|
|
35
|
+
*
|
|
36
|
+
* These are the editor's own members rather than a vocabulary invented here, so
|
|
37
|
+
* the surface hands in the component the prompt bar already uses and nothing
|
|
38
|
+
* has to adapt it. Every key the gate does not claim — movement, deletion,
|
|
39
|
+
* undo, a pasted block — reaches the answer through this.
|
|
40
|
+
*/
|
|
41
|
+
export type GateInputMode = 'answer' | 'secret';
|
|
42
|
+
export interface GateInput {
|
|
43
|
+
/** The answer as written, with a pasted block expanded back to its text. */
|
|
44
|
+
getExpandedText(): string;
|
|
45
|
+
/** Replace the answer, so the next question of a batch does not inherit one. */
|
|
46
|
+
setText(text: string): void;
|
|
47
|
+
/** Lay the answer out for this width; its rows are drawn under the free-text row. */
|
|
48
|
+
render(width: number): string[];
|
|
49
|
+
/** Take a key the gate itself did not claim. */
|
|
50
|
+
handleInput(data: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* How the surface shows the answer it is collecting, absent on an editor
|
|
53
|
+
* that has no way to hide one.
|
|
54
|
+
*/
|
|
55
|
+
setMode?(mode: GateInputMode): void;
|
|
56
|
+
}
|
|
11
57
|
/** One selectable row of a question gate. */
|
|
12
58
|
export interface GateOption {
|
|
13
59
|
readonly label: string;
|
|
@@ -15,6 +61,15 @@ export interface GateOption {
|
|
|
15
61
|
readonly current: boolean;
|
|
16
62
|
readonly selected: boolean;
|
|
17
63
|
}
|
|
64
|
+
/** The row that answers with typed text instead of a listed label. */
|
|
65
|
+
export interface GateCustomRow {
|
|
66
|
+
readonly label: string;
|
|
67
|
+
readonly description: string | undefined;
|
|
68
|
+
/** Whether the cursor is on this row, which is what makes typing the answer. */
|
|
69
|
+
readonly current: boolean;
|
|
70
|
+
/** Whether a custom answer is being formed or already holds text. */
|
|
71
|
+
readonly selected: boolean;
|
|
72
|
+
}
|
|
18
73
|
/**
|
|
19
74
|
* One pending approval.
|
|
20
75
|
*
|
|
@@ -25,8 +80,12 @@ export interface GateOption {
|
|
|
25
80
|
export declare class ApprovalGate {
|
|
26
81
|
private readonly toolName;
|
|
27
82
|
private readonly reason;
|
|
83
|
+
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
84
|
+
private readonly keys;
|
|
28
85
|
private outcome;
|
|
29
|
-
constructor(toolName: string, reason: string | undefined
|
|
86
|
+
constructor(toolName: string, reason: string | undefined,
|
|
87
|
+
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
88
|
+
keys: () => Keymap);
|
|
30
89
|
get resolved(): boolean;
|
|
31
90
|
/** Apply one key press; returns the outcome the first time it settles. */
|
|
32
91
|
handleKey(data: string): ApprovalOutcome | undefined;
|
|
@@ -37,6 +96,7 @@ export declare class ApprovalGate {
|
|
|
37
96
|
export interface GateQuestion {
|
|
38
97
|
readonly id: string;
|
|
39
98
|
readonly question: string;
|
|
99
|
+
readonly header: string | undefined;
|
|
40
100
|
readonly detail: string | undefined;
|
|
41
101
|
readonly options: readonly {
|
|
42
102
|
readonly label: string;
|
|
@@ -57,6 +117,8 @@ export interface GateAnswer {
|
|
|
57
117
|
* option-less gate rather than a rejected request: the model asked for text.
|
|
58
118
|
*/
|
|
59
119
|
export declare function toGateQuestions(request: unknown): GateQuestion[];
|
|
120
|
+
/** The number the free-text row answers for. It sits below the window, so drawn numbering runs 1..n then 0. */
|
|
121
|
+
export declare const CUSTOM_ROW_NUMBER = 0;
|
|
60
122
|
/**
|
|
61
123
|
* A pending batch of questions.
|
|
62
124
|
*
|
|
@@ -67,18 +129,99 @@ export declare function toGateQuestions(request: unknown): GateQuestion[];
|
|
|
67
129
|
*/
|
|
68
130
|
export declare class QuestionGate {
|
|
69
131
|
private readonly questions;
|
|
132
|
+
/** The editor every typed answer is written in, whichever row asks for it. */
|
|
133
|
+
private readonly input;
|
|
134
|
+
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
135
|
+
private readonly keys;
|
|
70
136
|
private index;
|
|
71
137
|
private cursor;
|
|
72
138
|
private typed;
|
|
139
|
+
/** Whether the cursor is on the free-text row. */
|
|
140
|
+
private atCustom;
|
|
141
|
+
/**
|
|
142
|
+
* The row an escape from the free-text row returns to.
|
|
143
|
+
*
|
|
144
|
+
* It is the row the reader last acted on — walked to, picked by its number, or
|
|
145
|
+
* toggled — because that is the option they were looking at when they decided
|
|
146
|
+
* to answer freely, and it is not always the row the cursor still stands on: a
|
|
147
|
+
* digit picks by number without walking anywhere.
|
|
148
|
+
*/
|
|
149
|
+
private customFrom;
|
|
73
150
|
private readonly chosen;
|
|
74
151
|
private readonly custom;
|
|
75
152
|
private finished;
|
|
76
|
-
constructor(questions: readonly GateQuestion[]
|
|
153
|
+
constructor(questions: readonly GateQuestion[],
|
|
154
|
+
/** The editor every typed answer is written in, whichever row asks for it. */
|
|
155
|
+
input: GateInput,
|
|
156
|
+
/** The keys in force, read per press so a settings edit lands on the next key. */
|
|
157
|
+
keys: () => Keymap);
|
|
158
|
+
/**
|
|
159
|
+
* Empty the editor for the question now under the cursor.
|
|
160
|
+
*
|
|
161
|
+
* The editor belongs to the surface and outlives one question, so an answer
|
|
162
|
+
* must never cross from the last question into the next — or from a gate that
|
|
163
|
+
* was abandoned into the one that follows it. Its mode follows the question
|
|
164
|
+
* for the same reason: a credential must not be shown because the last
|
|
165
|
+
* question was not one.
|
|
166
|
+
*/
|
|
167
|
+
private resetInput;
|
|
77
168
|
get resolved(): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Stop a question whose caller is gone.
|
|
171
|
+
*
|
|
172
|
+
* WHY: an aborted call has no reader for the answer, and a live gate would
|
|
173
|
+
* otherwise keep the keyboard — and the borrowed editor — until someone
|
|
174
|
+
* typed into a call that had already ended.
|
|
175
|
+
*/
|
|
176
|
+
cancel(): void;
|
|
78
177
|
private get current();
|
|
178
|
+
/**
|
|
179
|
+
* Options the typed filter leaves, in the order they were listed.
|
|
180
|
+
*
|
|
181
|
+
* The order is not the score order a picker uses: a digit answers by
|
|
182
|
+
* position, and re-ranking rows would move the number the reader just read.
|
|
183
|
+
*/
|
|
184
|
+
private matched;
|
|
185
|
+
/**
|
|
186
|
+
* The rows the keys and the card agree on: the filter, then a window around
|
|
187
|
+
* the cursor, because a list as long as a provider catalog would otherwise
|
|
188
|
+
* push the editor off the screen.
|
|
189
|
+
*/
|
|
190
|
+
private windowed;
|
|
191
|
+
/** The row under the cursor, as the filter leaves it. */
|
|
192
|
+
private currentRow;
|
|
193
|
+
/** Take or drop one source option, by single-select replacement or multi-select toggle. */
|
|
194
|
+
private pick;
|
|
195
|
+
/**
|
|
196
|
+
* Whether a keystroke is answer text rather than a filter.
|
|
197
|
+
*
|
|
198
|
+
* A question without options has no list to filter, and the free-text row is
|
|
199
|
+
* where a question with options collects an answer the model did not list.
|
|
200
|
+
*/
|
|
201
|
+
private typingAnswer;
|
|
202
|
+
/** Add text to the filter, or to the answer the current row collects. */
|
|
203
|
+
private absorb;
|
|
79
204
|
/** Apply one key press; returns the batch answer the first time it completes. */
|
|
80
205
|
handleKey(data: string): GateAnswer[] | undefined;
|
|
206
|
+
/**
|
|
207
|
+
* One key press while the free-text row holds the cursor.
|
|
208
|
+
*
|
|
209
|
+
* Walking back to the list keeps whatever was typed, so a reader who changes
|
|
210
|
+
* their mind about answering freely has not lost the text yet. An escape
|
|
211
|
+
* leaves the row the same way, because a question skipped by accident is a
|
|
212
|
+
* question the reader has to answer again: from the list, where every other
|
|
213
|
+
* question is skipped, an escape skips this one too.
|
|
214
|
+
*/
|
|
215
|
+
private handleCustomKey;
|
|
216
|
+
/** Take the answer the reader confirmed, then leave the question. */
|
|
81
217
|
private confirm;
|
|
218
|
+
/**
|
|
219
|
+
* Leave the current question for the next one.
|
|
220
|
+
*
|
|
221
|
+
* Typed text belongs to the question being left, so it never crosses into the
|
|
222
|
+
* next one — which is why a skipped question reports no typed answer at all.
|
|
223
|
+
*/
|
|
224
|
+
private advance;
|
|
82
225
|
private result;
|
|
83
226
|
card(): GateCard;
|
|
84
227
|
}
|
package/lib/gates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../src/gates.ts"],"names":[],"mappings":"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"}
|