@retasc/cli 1.16.1 → 1.17.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/CHANGELOG.md +22 -0
- package/dist/commands/import.js +29 -21
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,28 @@ release commits and the issues they reference.
|
|
|
6
6
|
|
|
7
7
|
Dates are the npm publish date. Each entry names the RTSC issue behind it.
|
|
8
8
|
|
|
9
|
+
## 1.17.0 (2026-08-02)
|
|
10
|
+
|
|
11
|
+
- **RTSC-529** — the column mapping is a numbered picker, like every other prompt.
|
|
12
|
+
|
|
13
|
+
It was the only one that made you type a word. Picking an org, a project, a source, a
|
|
14
|
+
list, a reviewer, a sign-in door or whether to install globally are all numbered lists
|
|
15
|
+
reading `Choose a number` — and the reviewer picker appears two lines below this one, so a
|
|
16
|
+
single import taught two input styles within four lines of output.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
to do
|
|
20
|
+
1) todo (suggested)
|
|
21
|
+
2) doing
|
|
22
|
+
3) done
|
|
23
|
+
4) canceled
|
|
24
|
+
Choose a number [1]:
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Enter still takes the suggestion, now marked in the list rather than described beside it.
|
|
28
|
+
Typing the word still works for anyone who has learned the vocabulary; it just isn't what
|
|
29
|
+
the prompt advertises.
|
|
30
|
+
|
|
9
31
|
## 1.16.1 (2026-08-02)
|
|
10
32
|
|
|
11
33
|
- **RTSC-528** — two things the first real `retasc import` run turned up.
|
package/dist/commands/import.js
CHANGED
|
@@ -180,7 +180,7 @@ export async function mapStatuses(statuses, reviewers, askFn) {
|
|
|
180
180
|
const statusMap = {};
|
|
181
181
|
const reviewerByStatus = {};
|
|
182
182
|
console.log(`\nWhat does each column mean? ${statuses.length} to confirm.\n` +
|
|
183
|
-
" Press Enter to
|
|
183
|
+
" Press Enter to take the suggested answer, or pick another number.\n" +
|
|
184
184
|
" The suggestion comes from the column's type in your tool, not its name.");
|
|
185
185
|
// Grouped under the source's own section names, in the source's own order within each
|
|
186
186
|
// (RTSC-436/526). On a twenty-column Jira board a flat list is a wall; the sections are
|
|
@@ -196,36 +196,44 @@ export async function mapStatuses(statuses, reviewers, askFn) {
|
|
|
196
196
|
const suggested = allowed.includes(s.suggested)
|
|
197
197
|
? s.suggested
|
|
198
198
|
: "todo";
|
|
199
|
+
// RTSC-529 — NUMBERED, like every other prompt in the CLI.
|
|
200
|
+
//
|
|
201
|
+
// This was the only one that asked you to type a word. Org, project, source, list,
|
|
202
|
+
// reviewer, sign-in door (RTSC-508) and install choice (RTSC-523) are all numbered
|
|
203
|
+
// pickers reading "Choose a number" — and the reviewer picker appears two lines below
|
|
204
|
+
// THIS one, so a single run taught two input styles within four lines of output.
|
|
205
|
+
//
|
|
206
|
+
// RTSC-528 tried to fix that by making the typing instruction explicit. That treated
|
|
207
|
+
// the symptom: a prompt that has to teach you its own input method is usually the
|
|
208
|
+
// wrong input method.
|
|
209
|
+
//
|
|
210
|
+
// The default is marked in the list rather than described outside it, and the words
|
|
211
|
+
// are still accepted — someone ten columns in knows the vocabulary, and typing `doing`
|
|
212
|
+
// beats re-reading a list. That is a shortcut, not the advertised path, so it is not
|
|
213
|
+
// in the instruction.
|
|
214
|
+
console.log(`\n ${clean(s.name)}`);
|
|
215
|
+
allowed.forEach((m, i) => console.log(` ${i + 1}) ${m}${m === suggested ? " (suggested)" : ""}`));
|
|
216
|
+
const defaultSlot = allowed.indexOf(suggested) + 1;
|
|
199
217
|
for (let attempt = 0;; attempt++) {
|
|
200
|
-
|
|
201
|
-
//
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
// which made the contrast worse.
|
|
206
|
-
//
|
|
207
|
-
// The suggestion is also removed from the alternatives — it is already what Enter
|
|
208
|
-
// does, and listing it again is what made the line read as four equal options with a
|
|
209
|
-
// mysterious bracket in front.
|
|
210
|
-
const others = allowed.filter((m) => m !== suggested);
|
|
211
|
-
const answer = (await askFn(`\n ${clean(s.name)}\n` +
|
|
212
|
-
` Enter to keep ${suggested}, or type: ${others.join(", ")}\n` +
|
|
213
|
-
` > `)).trim().toLowerCase();
|
|
214
|
-
const choice = answer === "" ? suggested : answer;
|
|
215
|
-
if (allowed.includes(choice)) {
|
|
218
|
+
const answer = (await askFn(` Choose a number [${defaultSlot}]: `)).trim().toLowerCase();
|
|
219
|
+
// Enter takes the suggestion; a digit picks a row; a word still works.
|
|
220
|
+
const byNumber = /^\d+$/.test(answer) ? allowed[Number(answer) - 1] : undefined;
|
|
221
|
+
const choice = answer === "" ? suggested : (byNumber ?? answer);
|
|
222
|
+
if (choice && allowed.includes(choice)) {
|
|
216
223
|
statusMap[s.id] = choice;
|
|
217
224
|
break;
|
|
218
225
|
}
|
|
219
|
-
|
|
220
|
-
|
|
226
|
+
// Say WHY when the answer names something real but not permitted here. The server
|
|
227
|
+
// would reject it anyway, and repeating the list explains nothing.
|
|
228
|
+
if (answer === "review" && !reviewAllowed(s.group)) {
|
|
221
229
|
console.log(" Not for this column: review means finished and awaiting acceptance,");
|
|
222
230
|
console.log(" and this one holds work nobody has started.");
|
|
223
231
|
}
|
|
224
|
-
else if (
|
|
232
|
+
else if (answer === "review") {
|
|
225
233
|
console.log(" No one in this org can be a reviewer yet, so review isn't available.");
|
|
226
234
|
}
|
|
227
235
|
else {
|
|
228
|
-
console.log(`
|
|
236
|
+
console.log(` Enter a number between 1 and ${allowed.length}.`);
|
|
229
237
|
}
|
|
230
238
|
if (attempt >= 2)
|
|
231
239
|
throw new Error("no valid choice — aborting");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retasc/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "Retasc CLI \u2014 the issue tracker AI agents pull work from. Sign in with GitHub or Google, create projects, mint agent API keys, and wire your agent to the Retasc MCP server in one command.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|