@cspeach/cli 1.1.13 → 1.1.14
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// GENERATED FILE — bundled skills for local mode.
|
|
2
2
|
// Source: https://manifest.cspeach.dev/v1.json
|
|
3
|
-
// Generated: 2026-09-
|
|
3
|
+
// Generated: 2026-09-17T22:46:40.872Z
|
|
4
4
|
// Manifest signature verified at build time.
|
|
5
5
|
export const BUNDLED_SKILLS = {
|
|
6
6
|
"abap-atc-fix": {
|
|
@@ -199,8 +199,16 @@ export function AskForm({ request, onResolve }) {
|
|
|
199
199
|
const values = q.options
|
|
200
200
|
.filter((o) => multiSel[focus].has(o.value))
|
|
201
201
|
.map((o) => o.value);
|
|
202
|
-
if (values.length === 0)
|
|
203
|
-
|
|
202
|
+
if (values.length === 0) {
|
|
203
|
+
// 2026-09-17 — nothing toggled: Enter used to do NOTHING, silently.
|
|
204
|
+
// Every other question answers on Enter, so a user who arrows to a
|
|
205
|
+
// row and presses Enter (Glenn's first session) sat there stuck.
|
|
206
|
+
// Enter alone now picks the highlighted option, single-choice style.
|
|
207
|
+
const opt = q.options[cursor];
|
|
208
|
+
if (opt)
|
|
209
|
+
answerAndAdvance(focus, opt.value);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
204
212
|
answerAndAdvance(focus, values.join(','));
|
|
205
213
|
}
|
|
206
214
|
else {
|
|
@@ -220,7 +228,7 @@ export function AskForm({ request, onResolve }) {
|
|
|
220
228
|
const cur = i === focus;
|
|
221
229
|
const done = answers[i] !== null;
|
|
222
230
|
return (_jsxs(Text, { color: cur ? PEACH : undefined, bold: cur, dimColor: !cur, children: [i > 0 ? ' ' : '', done ? '✓ ' : '', qq.header ?? qq.id] }, qq.id));
|
|
223
|
-
}) }) }), isSubmit ? (_jsx(Text, { dimColor: true, wrap: "truncate-end", children: "All questions answered \u2014 Tab/\u2190 to review, Enter to submit \u00B7 Esc cancel" })) : q ? (_jsxs(_Fragment, { children: [
|
|
231
|
+
}) }) }), isSubmit ? (_jsx(Text, { dimColor: true, wrap: "truncate-end", children: "All questions answered \u2014 Tab/\u2190 to review, Enter to submit \u00B7 Esc cancel" })) : q ? (_jsxs(_Fragment, { children: [_jsxs(Text, { bold: true, wrap: "truncate-end", children: [q.question, q.multiSelect ? ' (choose one or more)' : ''] }), q.context && _jsx(Text, { dimColor: true, wrap: "truncate-end", children: q.context }), !q.freeText && (_jsxs(_Fragment, { children: [winStart > 0 && _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: [" \u2191 ", winStart, " more"] }), visible.map((o, vi) => {
|
|
224
232
|
const idx = winStart + vi;
|
|
225
233
|
const isCur = !otherFocused && idx === cursor;
|
|
226
234
|
const mark = q.multiSelect
|
|
@@ -24,7 +24,9 @@ import TextInput from '../text-input.js';
|
|
|
24
24
|
const PEACH = '#FFCBA4';
|
|
25
25
|
export function askHelpLine(kind, opts) {
|
|
26
26
|
switch (kind) {
|
|
27
|
-
|
|
27
|
+
// 2026-09-17 — spelled out after a first-session user could not tell a
|
|
28
|
+
// multi-select from a single pick ("was it a multi select?").
|
|
29
|
+
case 'multi': return 'Space ticks a row · Enter confirms · Enter alone picks the highlighted row · Esc cancels';
|
|
28
30
|
case 'pick': return opts?.single ? 'Enter pick · Esc cancel' : 'Enter pick · Tab next · Esc cancel';
|
|
29
31
|
default: return opts?.single ? 'Enter submit · Esc cancel' : 'Tab next · Esc cancel';
|
|
30
32
|
}
|
|
@@ -153,14 +155,20 @@ function MultiForm({ params, onResolve }) {
|
|
|
153
155
|
.filter((c) => selected.has(c.value))
|
|
154
156
|
.map((c) => c.value);
|
|
155
157
|
if (values.length === 0) {
|
|
156
|
-
|
|
158
|
+
// 2026-09-17 — nothing toggled: Enter alone picks the highlighted
|
|
159
|
+
// option (single-choice muscle memory) instead of cancelling.
|
|
160
|
+
const current = params.choices[cursor];
|
|
161
|
+
if (current)
|
|
162
|
+
onResolve({ answer: current.value });
|
|
163
|
+
else
|
|
164
|
+
onResolve({ answer: null, cancelled: true });
|
|
157
165
|
}
|
|
158
166
|
else {
|
|
159
167
|
onResolve({ answer: values.join(',') });
|
|
160
168
|
}
|
|
161
169
|
}
|
|
162
170
|
}, { isActive: true });
|
|
163
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, flexShrink: 0, children: [
|
|
171
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, flexShrink: 0, children: [_jsxs(Text, { bold: true, children: [params.question, " (choose one or more)"] }), params.context && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: params.context }) })), _jsx(Box, { marginTop: 1, flexDirection: "column", children: params.choices.map((c, i) => {
|
|
164
172
|
const isCursor = i === cursor;
|
|
165
173
|
const isSelected = selected.has(c.value);
|
|
166
174
|
const mark = isSelected ? '◉' : '○';
|