dsh-ssh-tui 0.6.3 → 0.7.0-rc.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.en.md +29 -2
- package/README.md +21 -1
- package/lib/approval-cache.js +158 -0
- package/lib/approval-cache.js.map +1 -0
- package/lib/auto-approval.js +13 -0
- package/lib/auto-approval.js.map +1 -1
- package/lib/commands.js +5 -0
- package/lib/commands.js.map +1 -1
- package/lib/context-window.js +139 -0
- package/lib/context-window.js.map +1 -0
- package/lib/dialogs.js +14 -7
- package/lib/dialogs.js.map +1 -1
- package/lib/display-sock.js +23 -7
- package/lib/display-sock.js.map +1 -1
- package/lib/doctor.js +380 -0
- package/lib/doctor.js.map +1 -0
- package/lib/i18n/en.js +167 -3
- package/lib/i18n/en.js.map +1 -1
- package/lib/i18n/zh.js +167 -3
- package/lib/i18n/zh.js.map +1 -1
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/job-label.js +45 -0
- package/lib/job-label.js.map +1 -0
- package/lib/paint.js +144 -27
- package/lib/paint.js.map +1 -1
- package/lib/preset-authoring.js +110 -0
- package/lib/preset-authoring.js.map +1 -0
- package/lib/preset-rows.js +288 -34
- package/lib/preset-rows.js.map +1 -1
- package/lib/provider-catalog.js +12 -2
- package/lib/provider-catalog.js.map +1 -1
- package/lib/quota.js +149 -1
- package/lib/quota.js.map +1 -1
- package/lib/term-text.js +82 -11
- package/lib/term-text.js.map +1 -1
- package/lib/tool-present.js +14 -1
- package/lib/tool-present.js.map +1 -1
- package/lib/tui.js +986 -34
- package/lib/tui.js.map +1 -1
- package/lib/types/approval-cache.d.ts +125 -0
- package/lib/types/auto-approval.d.ts +11 -0
- package/lib/types/commands.d.ts +9 -0
- package/lib/types/context-window.d.ts +46 -0
- package/lib/types/dialogs.d.ts +6 -4
- package/lib/types/display-sock.d.ts +6 -0
- package/lib/types/doctor.d.ts +118 -0
- package/lib/types/job-label.d.ts +20 -0
- package/lib/types/paint.d.ts +80 -3
- package/lib/types/preset-authoring.d.ts +135 -0
- package/lib/types/preset-rows.d.ts +113 -9
- package/lib/types/provider-catalog.d.ts +2 -0
- package/lib/types/quota.d.ts +49 -0
- package/lib/types/term-text.d.ts +33 -4
- package/lib/types/tool-present.d.ts +1 -0
- package/lib/types/tui.d.ts +155 -1
- package/package.json +32 -32
package/README.en.md
CHANGED
|
@@ -235,6 +235,7 @@ On first launch (when no API key is configured) the TUI opens a setup wizard:
|
|
|
235
235
|
1. choose a provider template, matching the official Models page:
|
|
236
236
|
- DeepSeek official;
|
|
237
237
|
- OpenCode Go (`opencode.ai/zen/go/v1`, Responses protocol);
|
|
238
|
+
- Command Code (`api.commandcode.ai`, Completions protocol, with its own quota);
|
|
238
239
|
- custom OpenAI-compatible gateway (Completions);
|
|
239
240
|
- custom OpenAI Responses gateway;
|
|
240
241
|
- Anthropic Messages-compatible gateway;
|
|
@@ -244,6 +245,17 @@ On first launch (when no API key is configured) the TUI opens a setup wizard:
|
|
|
244
245
|
current model list straight from the provider endpoint;
|
|
245
246
|
3. confirm and save.
|
|
246
247
|
|
|
248
|
+
The wizard sizes each model's context window automatically: the endpoint
|
|
249
|
+
`/models` capacities first, then the installed pi-ai catalog by model name
|
|
250
|
+
(stripping the thinking-level suffixes providers bake into an id — `-high`,
|
|
251
|
+
`-low`, `-thinking` — plus `vendor/` prefixes, `:free` tags, and date stamps).
|
|
252
|
+
Only when some pick still has no capacity does a route-default step appear,
|
|
253
|
+
pre-filled with the smallest window the route proved, so accepting it needs no
|
|
254
|
+
typing; when every pick matched, that step is skipped entirely. What is saved
|
|
255
|
+
is the route-level `defaultContextWindow`, which models added later through
|
|
256
|
+
`/model` inherit too — and `/model` itself looks the model up in the catalog
|
|
257
|
+
first, writing that model's `contextWindow` directly when it matches.
|
|
258
|
+
|
|
247
259
|
The wizard writes the key to `~/.dsh/.credentials.yaml` when no environment
|
|
248
260
|
variable shadows it; if the machine injects `DEEPSEEK_API_KEY` from
|
|
249
261
|
`/etc/profile.d` or similar, it writes `~/.dsh/env.sh` (sourced by
|
|
@@ -299,6 +311,7 @@ The plugin runs on Linux, macOS, and Windows (Node ≥ 22.19):
|
|
|
299
311
|
when a session is replayed on `--resume` — from the durable `assistant/chunk`
|
|
300
312
|
events on 0.1.2 hosts, or from the packed stream inside `assistant/message`
|
|
301
313
|
on 0.1.5. Steps with no usable timing fall back to `首字 1.2s`.
|
|
314
|
+
- Emoji width: BMP symbols carrying the Unicode `Emoji` property are budgeted two cells. When the monospace font lacks the glyph, the terminal falls back to a colour emoji about 1.6 cells wide that still advances one cell — it covers its neighbours, and the second budgeted cell goes unspent so the row comes up short. `pinEmojiCells()` does both halves at paint time: VS15 asks for the narrow text form, and a reserving space spends the second cell (emitted unconditionally, so "two cells plus every space in the text" equals "one cell of glyph advance, one reserving space, and those same spaces" for every shape). Symbols that already default to emoji presentation (`✅` `⚡` …) and astral emoji (`😀` …) advance two cells and are left alone.
|
|
302
315
|
- Reconnect: channel readiness is a real connect, so a `.sock` file left behind by a killed Host is no longer listed as attachable (it used to fail the first attach with `write EPIPE`); a Host still cancelling/flushing keeps itself alive when a relay HELLOs mid-hangup; a launcher that hits a vanished peer retries once automatically — silently, with the TTY kept in raw mode and queued bytes dropped so a stale cursor reply is never echoed as `^[[17;1R`; and a probe that misses its window is retried while the Host keeps the last measurement, so the footer chip does not fall back to four hollow circles.
|
|
303
316
|
- Reporting a problem: `/diag` prints a local, read-only snapshot — plugin/dsh/node
|
|
304
317
|
versions, platform, session id, whether this process is the launcher or the detached
|
|
@@ -308,6 +321,19 @@ The plugin runs on Linux, macOS, and Windows (Node ≥ 22.19):
|
|
|
308
321
|
a **verdict chain** ("attaches to the leftover Host (pid N), do not open a second
|
|
309
322
|
window", "the pid was recycled", "a leftover socket file that does not answer — the
|
|
310
323
|
source of the first-attach EPIPE"). Nothing leaves the machine; paste it into an issue.
|
|
324
|
+
- When `/mode` reports a missing service or the preset tools vanish after an upgrade
|
|
325
|
+
(the 0.6.3 class of configuration regression), run `/doctor`. It judges the
|
|
326
|
+
**deployment composition** item by item: whether the profile patch parses, whether the
|
|
327
|
+
agent-presets roster and code-runtime are composed (naming the missing row), whether the
|
|
328
|
+
subagent model-selection settings row is mounted, whether any row is mounted twice (with
|
|
329
|
+
its line), whether the profile layer and the bundle layer both mount a row, whether the
|
|
330
|
+
host version is in the plugin's declared compatibility table, whether two
|
|
331
|
+
`@deepseek-ai/dsh-scope` installs exist (the nested-install copy trap), and whether the
|
|
332
|
+
default route and the subagent model are self-consistent. Every item carries its evidence
|
|
333
|
+
and the command that acts on it. `/doctor --fix` mounts the missing rows and merges
|
|
334
|
+
duplicates into `cordis.patch.yml`, keeping a `.bak-<timestamp>` beside it and never
|
|
335
|
+
touching an override or disable you wrote; `/fix code-runtime` repairs one row. A restart
|
|
336
|
+
picks it up, and like `/diag` nothing leaves the machine.
|
|
311
337
|
- Leftover Host lifetime: the write lock a dropped-but-still-running Host holds is what makes the Web UI refuse the same session (`resume failed for session … is already owned by an active write handle`), and a drop that raced a reattach used to leave the honored-reattach flag set, so the *next* drop was ignored and the session lock kept its stale state. The flag is cleared once a turn runs again, and once the turn the Host stayed for settles it exits within `DSH_TUI_IDLE_EXIT_MS` (default 60s, `0` disables) instead of holding the session for six hours.
|
|
312
338
|
- Subagent route: the identity row always carries `sub:<model>` — the route
|
|
313
339
|
every child inherits — suffixed with the effort when `/subeffort` set one,
|
|
@@ -340,7 +366,7 @@ The plugin runs on Linux, macOS, and Windows (Node ≥ 22.19):
|
|
|
340
366
|
| `Ctrl+D` | exit |
|
|
341
367
|
| `Ctrl+L` | redraw |
|
|
342
368
|
| `y` / `n` / `Esc` | answer an approval prompt |
|
|
343
|
-
| `1..9` + `Enter` | answer an `ask_user_question` dialog |
|
|
369
|
+
| `1..9` + `Enter` | answer an `ask_user_question` dialog: `1..9` picks directly, `Enter` takes the highlighted option (the first by default), `Esc` cancels |
|
|
344
370
|
|
|
345
371
|
Type `/` to see slash-command suggestions — the panel merges the TUI's own
|
|
346
372
|
commands (`/find`, `/copy`, `/model`, `/effort`, `/provider`, `/language`, `/view`, `/disconnect`, `/approval`, `/help`, ...) with every command the harness
|
|
@@ -426,9 +452,10 @@ labelled `(images ok)` in the command list and completion hints.
|
|
|
426
452
|
- **OpenAI Completions gateways** probe `/user/balance` and `credit_grants`;
|
|
427
453
|
- **SuperGrok** reads `GET cli-chat-proxy.grok.com/v1/billing` (weekly remaining %);
|
|
428
454
|
- **OpenCode Go** reads the official `/v1/usage` windows (5-hour / week / month);
|
|
455
|
+
- **Command Code** reads `/alpha/billing/credits` (5-hour / week windows plus the USD credit pool);
|
|
429
456
|
- **OpenCode Zen** is metered — the TUI points at `https://opencode.ai/zen`.
|
|
430
457
|
|
|
431
|
-
OpenCode Go / SuperGrok quota is fetched silently at start and every 10
|
|
458
|
+
OpenCode Go / Command Code / SuperGrok quota is fetched silently at start and every 10
|
|
432
459
|
model steps (every 4 when an hourly window is near a threshold). The footer
|
|
433
460
|
shows plan name + remaining bar + percent; on a narrow row the plan name
|
|
434
461
|
drops first. DeepSeek official and queryable OpenAI-compatible gateways put
|
package/README.md
CHANGED
|
@@ -282,6 +282,7 @@ dsh --profile tui --no-color
|
|
|
282
282
|
| 键 | 作用 |
|
|
283
283
|
| --- | --- |
|
|
284
284
|
| `Enter` | 发送;运行中则插入指示;空输入且已选卡片时展开/收起。工具正文超出窗口则单独全览,`Esc` 返回 |
|
|
285
|
+
| `1..9` / `Enter` | 回答 `ask_user_question` 提问:`1..9` 直接选,`Enter` 取当前高亮项(默认第一项),`Esc` 才取消 |
|
|
285
286
|
| `↑` / `↓` | 空输入:在卡片间移动;有输入:历史(↓ 越过最新一条会回到当前草稿)。与 `Ctrl+N` / `Ctrl+P` 相同 |
|
|
286
287
|
| `Ctrl+R` | 展开最新一条卡片;已用 ↑/↓ 选中时全部展开或全部收起 |
|
|
287
288
|
| `Ctrl+T` | 折叠输入框(只影响显示) |
|
|
@@ -358,9 +359,10 @@ API Key 提供商,不会冲掉其它路由。SuperGrok / X Premium 走本机 O
|
|
|
358
359
|
- **OpenAI Completions 兼容网关**:按配置的 base URL 探测 `/user/balance`、`/dashboard/billing/credit_grants` 等;
|
|
359
360
|
- **SuperGrok**:`GET cli-chat-proxy.grok.com/v1/billing`,显示本周剩余%;
|
|
360
361
|
- **OpenCode Go**:官方 `/v1/usage`,滚动 5 小时 / 本周 / 本月剩余%;
|
|
362
|
+
- **Command Code**:官方 `/alpha/billing/credits`,滚动 5 小时 / 本周剩余% + 月度额度余额(USD);
|
|
361
363
|
- **OpenCode Zen**:按量计费、没有固定额度,提示到 `https://opencode.ai/zen`。
|
|
362
364
|
|
|
363
|
-
OpenCode Go / SuperGrok 启动和运行中都静默查询,底栏显示套餐名 + 剩余条 + 百分比;窄屏先丢掉套餐名,只留条和百分比。DeepSeek 官方和可查询的 OpenAI 兼容网关把剩余余额画进底栏(`余额 86.42 CNY`)。跨过 50% / 25% / 10% / 5% 才往工作区打 ⚠。`/usage` 或 `/balance` 仍打印完整结果。查询默认每 **10 步**一次;小时窗口接近阈值时改 4 步。
|
|
365
|
+
OpenCode Go / Command Code / SuperGrok 启动和运行中都静默查询,底栏显示套餐名 + 剩余条 + 百分比;窄屏先丢掉套餐名,只留条和百分比。DeepSeek 官方和可查询的 OpenAI 兼容网关把剩余余额画进底栏(`余额 86.42 CNY`)。跨过 50% / 25% / 10% / 5% 才往工作区打 ⚠。`/usage` 或 `/balance` 仍打印完整结果。查询默认每 **10 步**一次;小时窗口接近阈值时改 4 步。
|
|
364
366
|
|
|
365
367
|
## 配置
|
|
366
368
|
|
|
@@ -395,6 +397,15 @@ web 端与 TUI 共用同一份设置。`/model` 换提供商后**下一步请求
|
|
|
395
397
|
首次配置向导的自定义/OpenCode 提供商步骤中,输入模型 ID 前可按
|
|
396
398
|
`Ctrl+F` 直接从端点拉取模型列表,免去手动输入。
|
|
397
399
|
|
|
400
|
+
向导会尽量自动填好上下文窗口:先读端点 `/models` 的容量字段,查不到再按模型名
|
|
401
|
+
去内置 pi-ai 目录匹配(会剥离提供商写进模型名的思考档位后缀 `-high` / `-low` /
|
|
402
|
+
`-thinking`,以及 `vendor/` 前缀、`:free` 标签、日期戳),命中后逐模型写入
|
|
403
|
+
`contextWindow`。只有仍有模型查不到容量时,才多出一个「路由默认上下文窗口」步骤,
|
|
404
|
+
并把推导值预填好(取本路由已探明窗口的最小值,避免超声明)——直接回车采用,也可
|
|
405
|
+
输入其它数字;全部命中时该步骤自动跳过,不需要任何输入。保存的是路由级
|
|
406
|
+
`defaultContextWindow`,之后用 `/model` 新加的模型会继承它;而且 `/model` 追加
|
|
407
|
+
模型时本身也会先查一遍目录,命中就直接写入该模型的 `contextWindow`。
|
|
408
|
+
|
|
398
409
|
### profile 用户层
|
|
399
410
|
|
|
400
411
|
每个 profile 的 `cordis.patch.yml` 是用户覆盖层,可覆盖插件 patch 的任何行;
|
|
@@ -503,6 +514,7 @@ npm run build
|
|
|
503
514
|
- **标题栏或铃声不生效**:确认终端支持 OSC 0 与 BEL;铃声可用
|
|
504
515
|
`DSH_TUI_NO_BELL=1` 关闭。
|
|
505
516
|
- **滚轮误触取消**:已加入转义序列缓冲,网络拆包也不会把 `ESC` 当取消。
|
|
517
|
+
- **emoji 宽度**:带 Unicode `Emoji` 属性的 BMP 符号按 **2 格**预算。等宽字体缺字形时终端会回退到彩色 emoji 字形——它比所在单元格宽(实测约 1.6 格)却只前进 1 格,于是压住相邻字符;而预算的第二格没人用,整行又比终端宽度少算格子。绘制时 `pinEmojiCells()` 两件事一起做:补 **VS15** 请终端改用窄的文本字形;再补一个**占位空格**把第二格真正用掉(**无条件补**,即使后面本来就有空格——这样"预算 = 符号 2 格 + 文本里每个空格"与"终端实际 = 字形 1 格 + 占位 1 格 + 每个空格"在每种情况下都相等)。字形 1 格 + 占位 1 格正好等于预算的 2 格,所以既不压字也不会短算;已带 VS15/VS16 的会归一成一个 VS15,本就默认 emoji 呈现的符号(`✅` `⚡` 等)和星号区 emoji(`😀` 等)本来就走 2 格,不动。
|
|
506
518
|
- **跳板机 / 多层代理 SSH 发画**:每一帧只发脏行,并且拼成一次 `stdout.write`。本机 80 ms;SSH 启动时用 CSI 6n 测往返,按 RTT 选 80/160/250/400 ms。`DSH_TUI_PAINT_MS` 始终优先(40–1000)。统计行最左是 `SSH ●●●○ 90ms`(一格红、两格黄、三格及以上绿)。探测不写进转录。
|
|
507
519
|
- **SSH 断了**:空闲则 flush 后退出(不保活)。忙碌(思考/回复/工具/子代理)则默认取消当前轮次、flush 日志,Host 留下。`/disconnect continue` 则不取消,后台跑完。回来 `--resume` 会接入那个进程(见上文)。不要再开第二份 Host。
|
|
508
520
|
- **提示会话已在 pid 运行 / 可接入**:那份 Host 还活着。用 `--resume` 接入;只有 pid 已死、显示通道也连不上时才删 `$DSH_HOME/tui-locks/` 再从日志恢复。
|
|
@@ -534,6 +546,14 @@ npm run build
|
|
|
534
546
|
链路 RTT 与绘制间隔、会话日志格式与大小、本机其它会话的锁,最后是**判定链**——例如
|
|
535
547
|
"会接入后台 Host(pid N),不要另起第二个窗口"、"pid 被回收成别的程序"、
|
|
536
548
|
"通道上留着不响应的 socket 文件,这正是第一次接 EPIPE 的来源"。报 issue 时贴这段即可。
|
|
549
|
+
- **升级后 `/mode` 报「服务不可用」、preset 工具消失**:敲 `/doctor`。它在 `/diag` 的会话事实之外
|
|
550
|
+
把**部署组合**逐项判定:profile 补丁能否解析、agent-presets 名单与 code-runtime 是否组合
|
|
551
|
+
(缺哪一行直接点名)、子代理模型选择设置行在不在、有没有行被挂载两次(带行号)、profile 层与
|
|
552
|
+
bundle 层是否重复挂载、dsh 版本是否在插件声明的兼容表内、是否装着两份 `@deepseek-ai/dsh-scope`
|
|
553
|
+
(npm 嵌套安装的副本陷阱),以及默认路由与子代理模型是否自洽。每项给「结论 + 证据 + 修复命令」。
|
|
554
|
+
`/doctor --fix` 会把缺的行补进 `cordis.patch.yml`、把重复的挂载合并掉,写前留
|
|
555
|
+
`.bak-<时间戳>` 备份,**不动你自己写的 override/disable**,重启 TUI 后生效;只想修一行时用
|
|
556
|
+
`/fix code-runtime`。与 `/diag` 一样只读本地信息、不外传。
|
|
537
557
|
- **TUI 里进得去、Web 里打不开同一个会话**:会话的写锁(`session.lock`)是内核锁,同时只允许一个写者。
|
|
538
558
|
SSH 断开时那个还在跑轮的 Host 会留着锁,于是 Web 端打开时报
|
|
539
559
|
`resume failed for session "…" is already owned by an active write handle`——从 0.5.10 起
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A TTL cache for approval verdicts the AI reviewer already produced.
|
|
3
|
+
*
|
|
4
|
+
* `/approval auto` hands every shape the rule table cannot judge to a
|
|
5
|
+
* subagent-configured model: one `llm.stream` call, up to 15 seconds, and the
|
|
6
|
+
* user's quota. The same shape repeats inside one session — `pytest -q`,
|
|
7
|
+
* `npm install`, `docker compose up` — and each repeat paid the full review
|
|
8
|
+
* again. This module remembers a verdict for a bounded time so an identical
|
|
9
|
+
* request is decided from the cache.
|
|
10
|
+
*
|
|
11
|
+
* Two rules keep that safe, and both are structural rather than heuristic:
|
|
12
|
+
*
|
|
13
|
+
* 1. Only requests the classifier marked `ask` are ever looked up or stored.
|
|
14
|
+
* Rule allows and denials are free, and `DANGER_PATTERNS` returns before the
|
|
15
|
+
* cache is consulted at all, so a remembered verdict can never widen what
|
|
16
|
+
* the rule table refuses.
|
|
17
|
+
* 2. The key is an exact identity, not a prefix: the tool, the canonical
|
|
18
|
+
* command, its raw arguments, the sandbox mode, the workspace, the locale,
|
|
19
|
+
* the reviewer that produced the verdict, and a fingerprint of the user
|
|
20
|
+
* message that authorized it. A verdict handed out while `npm publish` was
|
|
21
|
+
* authorized never answers `npm publish --tag next`, and an escalation
|
|
22
|
+
* justified in one message is not replayed for the next one.
|
|
23
|
+
*
|
|
24
|
+
* Opaque interpreter payloads (`bash -c`, `python -e`) are excluded on purpose:
|
|
25
|
+
* the review result there depends entirely on a script the key cannot see.
|
|
26
|
+
* @module dsh-ssh-tui/approval-cache
|
|
27
|
+
*/
|
|
28
|
+
import { isOpaqueInterpreterCommand } from './auto-approval.js';
|
|
29
|
+
/** How long one remembered verdict stays usable. */
|
|
30
|
+
export const DEFAULT_VERDICT_TTL_MS = 10 * 60 * 1000;
|
|
31
|
+
/** How many verdicts are remembered at once; the least recently used go first. */
|
|
32
|
+
export const DEFAULT_VERDICT_CAPACITY = 32;
|
|
33
|
+
/** FNV-1a: dependency-free, stable across restarts, and fine for a cache key. */
|
|
34
|
+
function fnv1a(text) {
|
|
35
|
+
let hash = 0x811c9dc5;
|
|
36
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
37
|
+
hash ^= text.charCodeAt(index);
|
|
38
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
39
|
+
}
|
|
40
|
+
return hash.toString(16).padStart(8, '0');
|
|
41
|
+
}
|
|
42
|
+
/** Whitespace-insensitive form of a command, so spacing alone cannot miss. */
|
|
43
|
+
export function canonicalCommand(command) {
|
|
44
|
+
return command.trim().replace(/\s+/gu, ' ');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether a verdict for this request may be remembered.
|
|
48
|
+
*
|
|
49
|
+
* A request without a command has nothing to key on, and an interpreter
|
|
50
|
+
* wrapper hides its payload behind `-c`/`-e`, so its review says nothing about
|
|
51
|
+
* the next invocation of the same wrapper.
|
|
52
|
+
* @param input - the identity a verdict would be stored under.
|
|
53
|
+
* @returns whether the cache may serve and store this shape.
|
|
54
|
+
*/
|
|
55
|
+
export function cacheableShape(input) {
|
|
56
|
+
const command = canonicalCommand(input.command);
|
|
57
|
+
if (command === '')
|
|
58
|
+
return false;
|
|
59
|
+
return !isOpaqueInterpreterCommand(command);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The cache key for one reviewed request.
|
|
63
|
+
* @param input - the identity a verdict would be stored under.
|
|
64
|
+
* @returns a stable, collision-resistant digest.
|
|
65
|
+
*/
|
|
66
|
+
export function verdictKey(input) {
|
|
67
|
+
return fnv1a([
|
|
68
|
+
input.toolName,
|
|
69
|
+
canonicalCommand(input.command),
|
|
70
|
+
input.args ?? '',
|
|
71
|
+
input.reason ?? '',
|
|
72
|
+
input.sandboxMode ?? '',
|
|
73
|
+
input.agentId,
|
|
74
|
+
input.workspaceCwd,
|
|
75
|
+
input.locale,
|
|
76
|
+
`${input.reviewer.provider}/${input.reviewer.model}`,
|
|
77
|
+
input.authorization,
|
|
78
|
+
].join('\u0000'));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A bounded, time-limited map from a reviewed request to its verdict.
|
|
82
|
+
*
|
|
83
|
+
* Both limits are injectable so tests can drive the clock instead of sleeping.
|
|
84
|
+
* The instance is per TUI: a fresh session starts with an empty cache, and
|
|
85
|
+
* nothing is written to disk.
|
|
86
|
+
*/
|
|
87
|
+
export class ApprovalVerdictCache {
|
|
88
|
+
options;
|
|
89
|
+
entries = new Map();
|
|
90
|
+
hitCount = 0;
|
|
91
|
+
constructor(options = {}) {
|
|
92
|
+
this.options = options;
|
|
93
|
+
}
|
|
94
|
+
get ttlMs() {
|
|
95
|
+
return this.options.ttlMs ?? DEFAULT_VERDICT_TTL_MS;
|
|
96
|
+
}
|
|
97
|
+
get capacity() {
|
|
98
|
+
return this.options.capacity ?? DEFAULT_VERDICT_CAPACITY;
|
|
99
|
+
}
|
|
100
|
+
get now() {
|
|
101
|
+
return (this.options.now ?? Date.now)();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The remembered verdict for a key, if it is still inside its TTL.
|
|
105
|
+
* @param key - {@link verdictKey} of the request being decided.
|
|
106
|
+
* @returns the verdict and its age, or `undefined` for a miss or an expiry.
|
|
107
|
+
*/
|
|
108
|
+
lookup(key) {
|
|
109
|
+
const entry = this.entries.get(key);
|
|
110
|
+
if (entry === undefined)
|
|
111
|
+
return undefined;
|
|
112
|
+
const ageMs = this.now - entry.storedAt;
|
|
113
|
+
if (ageMs > this.ttlMs) {
|
|
114
|
+
this.entries.delete(key);
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
// Refresh recency so the entries in active use survive the capacity bound.
|
|
118
|
+
this.entries.delete(key);
|
|
119
|
+
this.entries.set(key, entry);
|
|
120
|
+
this.hitCount += 1;
|
|
121
|
+
return { verdict: entry.verdict, ageMs };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Remember one reviewed verdict, evicting the least recently used entry past
|
|
125
|
+
* the capacity.
|
|
126
|
+
* @param key - {@link verdictKey} of the reviewed request.
|
|
127
|
+
* @param verdict - what the reviewer concluded.
|
|
128
|
+
*/
|
|
129
|
+
store(key, verdict) {
|
|
130
|
+
this.entries.delete(key);
|
|
131
|
+
this.entries.set(key, { verdict, storedAt: this.now });
|
|
132
|
+
while (this.entries.size > this.capacity) {
|
|
133
|
+
const oldest = this.entries.keys().next().value;
|
|
134
|
+
if (oldest === undefined)
|
|
135
|
+
break;
|
|
136
|
+
this.entries.delete(oldest);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/** Drop every remembered verdict; returns how many were held. */
|
|
140
|
+
clear() {
|
|
141
|
+
const held = this.entries.size;
|
|
142
|
+
this.entries.clear();
|
|
143
|
+
return held;
|
|
144
|
+
}
|
|
145
|
+
/** How many verdicts are held right now. */
|
|
146
|
+
get size() {
|
|
147
|
+
return this.entries.size;
|
|
148
|
+
}
|
|
149
|
+
/** How many lookups were served from the cache over this instance's life. */
|
|
150
|
+
get hits() {
|
|
151
|
+
return this.hitCount;
|
|
152
|
+
}
|
|
153
|
+
/** The TTL as whole minutes, for the status line. */
|
|
154
|
+
get ttlMinutes() {
|
|
155
|
+
return Math.round(this.ttlMs / 60_000);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=approval-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-cache.js","sourceRoot":"","sources":["../src/approval-cache.ts"],"names":[],"mappings":"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"}
|
package/lib/auto-approval.js
CHANGED
|
@@ -184,6 +184,19 @@ export function classifyCommand(command) {
|
|
|
184
184
|
return classifyCommandDetailed(command).decision;
|
|
185
185
|
}
|
|
186
186
|
const INTERPRETER_WRAPPER = /^(?:python3?|node|nodejs|perl|ruby|php|lua|bash|sh|zsh)\s+-[ce]\b/u;
|
|
187
|
+
/**
|
|
188
|
+
* Whether a command is an opaque interpreter payload (`bash -c …`, `python -e …`).
|
|
189
|
+
*
|
|
190
|
+
* The rule table asks about these instead of denying them (a quoted `rm -rf`
|
|
191
|
+
* must not match `DANGER_PATTERNS`), and the AI reviewer judges the script it is
|
|
192
|
+
* shown — so its verdict says nothing about the next invocation of the same
|
|
193
|
+
* wrapper. The approval cache uses this to refuse to remember them.
|
|
194
|
+
* @param command - the command string a request carried.
|
|
195
|
+
* @returns whether the payload, not the command line, decides the risk.
|
|
196
|
+
*/
|
|
197
|
+
export function isOpaqueInterpreterCommand(command) {
|
|
198
|
+
return INTERPRETER_WRAPPER.test(command.trim());
|
|
199
|
+
}
|
|
187
200
|
export function classifyCommandDetailed(command) {
|
|
188
201
|
const trimmed = command.trim();
|
|
189
202
|
if (trimmed === '')
|
package/lib/auto-approval.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-approval.js","sourceRoot":"","sources":["../src/auto-approval.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-approval.js","sourceRoot":"","sources":["../src/auto-approval.ts"],"names":[],"mappings":"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"}
|
package/lib/commands.js
CHANGED
|
@@ -29,6 +29,11 @@ export const LOCAL_COMMANDS = [
|
|
|
29
29
|
{ name: 'copy', key: 'cmd.copy' },
|
|
30
30
|
{ name: 'language', key: 'cmd.language' },
|
|
31
31
|
{ name: 'lang', key: 'cmd.language', aliasOf: 'language' },
|
|
32
|
+
// Diagnostics stay at the end of the catalog so the first suggestion screen
|
|
33
|
+
// keeps the day-to-day commands (a bare `/` shows twelve rows).
|
|
34
|
+
{ name: 'doctor', key: 'cmd.doctor' },
|
|
35
|
+
{ name: 'fix', key: 'cmd.fix' },
|
|
36
|
+
{ name: 'preset', key: 'cmd.preset' },
|
|
32
37
|
{ name: 'dialog-test', key: 'cmd.dialog-test' },
|
|
33
38
|
];
|
|
34
39
|
export function commandDescription(name, aliasOf) {
|
package/lib/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route context-window sizing for hand-declared gateways.
|
|
3
|
+
*
|
|
4
|
+
* A gateway whose `GET /models` discloses no capacity leaves every model on the
|
|
5
|
+
* route at the harness default (262,144), so a long session compacts far
|
|
6
|
+
* earlier than the endpoint requires. `/setup` closes that gap from two
|
|
7
|
+
* sources, in order: the listing's own `context_length`, then the installed
|
|
8
|
+
* pi-ai catalog, which sizes 1,200-odd models under its own provider ids.
|
|
9
|
+
*
|
|
10
|
+
* A gateway id is rarely a catalog id verbatim — `gemini-claude-sonnet-4-6`
|
|
11
|
+
* proxies `claude-sonnet-4-6`, `deepseek/deepseek-v4.1-flash` is namespaced,
|
|
12
|
+
* `gemini-3.6-flash-high` names its thinking level — so the lookup normalizes
|
|
13
|
+
* before it matches, and reports nothing rather than guessing a window it
|
|
14
|
+
* never found.
|
|
15
|
+
*
|
|
16
|
+
* @module dsh-ssh-tui/context-window
|
|
17
|
+
*/
|
|
18
|
+
/** Trailing words a gateway uses to name a thinking level rather than a model. */
|
|
19
|
+
const EFFORT_SUFFIXES = [
|
|
20
|
+
'-nothinking', '-no-thinking', '-thinking', '-reasoning', '-reasoner',
|
|
21
|
+
'-xhigh', '-minimal', '-medium', '-high', '-low', '-max', '-fast',
|
|
22
|
+
];
|
|
23
|
+
/** Trailing words a gateway uses to name a tier, not a model. */
|
|
24
|
+
const TIER_SUFFIXES = ['-contributor', '-free', '-paid'];
|
|
25
|
+
/** Words a gateway may put in front of the model family it proxies. */
|
|
26
|
+
const NAMESPACE_HEADS = new Set([
|
|
27
|
+
'gemini', 'vertex', 'google', 'azure', 'bedrock', 'aws', 'openai', 'anthropic', 'antigravity',
|
|
28
|
+
]);
|
|
29
|
+
/** Family words that make the remainder after a namespace a model id. */
|
|
30
|
+
const FAMILY_HEADS = [
|
|
31
|
+
'claude', 'gpt', 'gemini', 'deepseek', 'grok', 'kimi', 'glm', 'qwen', 'minimax', 'llama', 'mistral', 'command',
|
|
32
|
+
];
|
|
33
|
+
/** Drop one gateway namespace word when what follows is a recognizable family. */
|
|
34
|
+
function stripNamespace(id) {
|
|
35
|
+
const cut = id.indexOf('-');
|
|
36
|
+
if (cut <= 0)
|
|
37
|
+
return id;
|
|
38
|
+
const head = id.slice(0, cut).toLowerCase();
|
|
39
|
+
const rest = id.slice(cut + 1);
|
|
40
|
+
if (!NAMESPACE_HEADS.has(head))
|
|
41
|
+
return id;
|
|
42
|
+
const lower = rest.toLowerCase();
|
|
43
|
+
return FAMILY_HEADS.some(family => lower.startsWith(family)) ? rest : id;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Catalog ids to try for one gateway model id, most specific first.
|
|
47
|
+
* @param raw - the id the endpoint advertises.
|
|
48
|
+
* @returns lowercased candidates, deduplicated and order-preserving.
|
|
49
|
+
*/
|
|
50
|
+
export function catalogIdCandidates(raw) {
|
|
51
|
+
const out = [];
|
|
52
|
+
const push = (value) => {
|
|
53
|
+
const id = value.trim().toLowerCase();
|
|
54
|
+
if (id !== '' && !out.includes(id))
|
|
55
|
+
out.push(id);
|
|
56
|
+
};
|
|
57
|
+
const expanded = new Set();
|
|
58
|
+
const expand = (seed) => {
|
|
59
|
+
if (seed === '' || expanded.has(seed))
|
|
60
|
+
return;
|
|
61
|
+
expanded.add(seed);
|
|
62
|
+
push(seed);
|
|
63
|
+
// `:free` / `:batch` are listing tags, not part of the model id.
|
|
64
|
+
const untagged = seed.replace(/:[a-z0-9.-]+$/u, '');
|
|
65
|
+
push(untagged);
|
|
66
|
+
push(stripNamespace(untagged));
|
|
67
|
+
for (const suffix of [...EFFORT_SUFFIXES, ...TIER_SUFFIXES]) {
|
|
68
|
+
if (!untagged.endsWith(suffix))
|
|
69
|
+
continue;
|
|
70
|
+
const trimmed = untagged.slice(0, -suffix.length);
|
|
71
|
+
expand(trimmed);
|
|
72
|
+
expand(stripNamespace(trimmed));
|
|
73
|
+
}
|
|
74
|
+
// `-20250929` release stamps.
|
|
75
|
+
const undated = untagged.replace(/-\d{8}$/u, '');
|
|
76
|
+
if (undated !== untagged)
|
|
77
|
+
expand(undated);
|
|
78
|
+
// The catalog carries both spellings of the major/minor separator.
|
|
79
|
+
const dotted = untagged.replace(/(\d)-(\d)(?=$|-)/u, '$1.$2');
|
|
80
|
+
const dashed = untagged.replace(/(\d)\.(\d)/gu, '$1-$2');
|
|
81
|
+
if (dotted !== untagged)
|
|
82
|
+
push(dotted);
|
|
83
|
+
if (dashed !== untagged)
|
|
84
|
+
push(dashed);
|
|
85
|
+
};
|
|
86
|
+
const input = raw.trim();
|
|
87
|
+
expand(input);
|
|
88
|
+
if (input.includes('/'))
|
|
89
|
+
expand(input.slice(input.lastIndexOf('/') + 1));
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Every catalog window, keyed by lowercased model id. The first provider to
|
|
94
|
+
* size an id wins, so a shared id keeps one stable answer.
|
|
95
|
+
* @param presets - the read catalog presets.
|
|
96
|
+
* @returns the lookup index.
|
|
97
|
+
*/
|
|
98
|
+
export function catalogWindowIndex(presets) {
|
|
99
|
+
const index = new Map();
|
|
100
|
+
for (const preset of presets) {
|
|
101
|
+
for (const [id, window] of Object.entries(preset.capacities ?? {})) {
|
|
102
|
+
if (Number.isFinite(window) && window > 0 && !index.has(id))
|
|
103
|
+
index.set(id, window);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return index;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The catalog window for one gateway model id.
|
|
110
|
+
* @param id - the id the endpoint advertises.
|
|
111
|
+
* @param index - {@link catalogWindowIndex} for the loaded catalog.
|
|
112
|
+
* @returns the window, or `undefined` when no candidate names a sized model.
|
|
113
|
+
*/
|
|
114
|
+
export function catalogContextWindow(id, index) {
|
|
115
|
+
for (const candidate of catalogIdCandidates(id)) {
|
|
116
|
+
const window = index.get(candidate);
|
|
117
|
+
if (window !== undefined)
|
|
118
|
+
return window;
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The route-level default to persist: the smallest window discovered for the
|
|
124
|
+
* route's selected models. A model neither the listing nor the catalog sizes
|
|
125
|
+
* then inherits a value the route already proved it serves, never more.
|
|
126
|
+
* @param windows - the per-model windows discovered so far.
|
|
127
|
+
* @returns the window, or `undefined` when nothing was discovered.
|
|
128
|
+
*/
|
|
129
|
+
export function suggestedRouteContextWindow(windows) {
|
|
130
|
+
let smallest;
|
|
131
|
+
for (const window of windows) {
|
|
132
|
+
if (!Number.isFinite(window) || window <= 0)
|
|
133
|
+
continue;
|
|
134
|
+
if (smallest === undefined || window < smallest)
|
|
135
|
+
smallest = window;
|
|
136
|
+
}
|
|
137
|
+
return smallest;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=context-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-window.js","sourceRoot":"","sources":["../src/context-window.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,kFAAkF;AAClF,MAAM,eAAe,GAAG;IACtB,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW;IACrE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CACzD,CAAA;AACV,iEAAiE;AACjE,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA;AACjE,uEAAuE;AACvE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa;CAC9F,CAAC,CAAA;AACF,yEAAyE;AACzE,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;CACtG,CAAA;AAEV,kFAAkF;AAClF,SAAS,cAAc,CAAC,EAAU;IAChC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IACvB,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAChC,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACrC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAQ,EAAE;QACpC,IAAI,IAAI,KAAK,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAM;QAC7C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,CAAA;QACV,iEAAiE;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,CAAC,CAAA;QACd,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9B,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAQ;YACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACjD,MAAM,CAAC,OAAO,CAAC,CAAA;YACf,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QACjC,CAAC;QACD,8BAA8B;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QAChD,IAAI,OAAO,KAAK,QAAQ;YAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACzC,mEAAmE;QACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QACxD,IAAI,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACxE,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAiC;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YACnE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,KAAkC;IACjF,KAAK,MAAM,SAAS,IAAI,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAA;IACzC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAyB;IACnE,IAAI,QAA4B,CAAA;IAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,SAAQ;QACrD,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ;YAAE,QAAQ,GAAG,MAAM,CAAA;IACpE,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
package/lib/dialogs.js
CHANGED
|
@@ -48,21 +48,28 @@ export function selectQuestionOptionByKey(dialog, key) {
|
|
|
48
48
|
return true;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
-
* What Enter means for a question dialog.
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
51
|
+
* What Enter means for a question dialog. Enter never answers with nothing: the
|
|
52
|
+
* list opens on the first option, and that highlight is the answer for a
|
|
53
|
+
* single-select list and a multi-select one alike — pressing Enter without
|
|
54
|
+
* touching anything returns the option under the cursor, and Esc stays the
|
|
55
|
+
* explicit cancel. Space (or a digit/letter) still builds a multi-select set,
|
|
56
|
+
* and a list with no options at all answers with the typed text.
|
|
55
57
|
*/
|
|
56
58
|
export function questionSubmit(dialog, input) {
|
|
57
59
|
const options = dialog.question.options ?? [];
|
|
58
60
|
const selected = [...dialog.selected]
|
|
59
61
|
.map(index => options[index]?.label)
|
|
60
62
|
.filter((label) => label !== undefined);
|
|
61
|
-
if (selected.length === 0 && options.length > 0 && dialog.question.multiSelect !== true) {
|
|
62
|
-
return { kind: 'reject' };
|
|
63
|
-
}
|
|
64
63
|
if (options.length === 0)
|
|
65
64
|
return { kind: 'resolve', selected: [], custom: input };
|
|
65
|
+
if (selected.length === 0) {
|
|
66
|
+
const highlighted = options[dialog.cursor]?.label;
|
|
67
|
+
// The cursor is clamped to the option list, so this guards only a dialog
|
|
68
|
+
// built without one; Enter must never silently answer nothing.
|
|
69
|
+
if (highlighted === undefined)
|
|
70
|
+
return { kind: 'reject' };
|
|
71
|
+
return { kind: 'resolve', selected: [highlighted] };
|
|
72
|
+
}
|
|
66
73
|
return { kind: 'resolve', selected };
|
|
67
74
|
}
|
|
68
75
|
/** y/n/ctrl-c/esc answers for a confirm prompt. */
|
package/lib/dialogs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialogs.js","sourceRoot":"","sources":["../src/dialogs.ts"],"names":[],"mappings":"AAgDA,yEAAyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,qCAAqC,CAAA;AAEzE,sEAAsE;AACtE,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,WAAmB;IAClE,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;IAC7D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,WAAW;QAAE,OAAO,SAAS,CAAA;IACvD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,kBAAkB,CAAC,MAAsB,EAAE,KAAa;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAA;IAClD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC7B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA;IACvE,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACvB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,MAAsB,EAAE,KAAa;IACxE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;;YACxD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,yBAAyB,CAAC,MAAsB,EAAE,GAAW;IAC3E,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;IAC5E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACrC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACnC,OAAO,IAAI,CAAA;AACb,CAAC;AAOD
|
|
1
|
+
{"version":3,"file":"dialogs.js","sourceRoot":"","sources":["../src/dialogs.ts"],"names":[],"mappings":"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"}
|