@hyzyn/dsh-tty 0.27.1 → 0.31.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.en.md +71 -8
- package/README.md +60 -9
- package/client.js +350 -71
- package/lib/index.d.ts +82 -3
- package/lib/index.js +224 -22
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/preview/harness.js +828 -9
- package/scripts/preview/mock-host.js +24 -0
- package/scripts/preview.mjs +23 -2
|
@@ -53,6 +53,25 @@
|
|
|
53
53
|
// 刻意**没有**任何隧道:验证「没配隧道时收进 ⋯ 更多」这条路径
|
|
54
54
|
// (上面两条都有隧道,走的是常驻「隧道 N」按钮)
|
|
55
55
|
{ name: 'bare-host', host: 'bare.internal', port: 22, username: 'ops', auth: 'agent', keyPath: '', passphrase: '', password: '', agentForward: false, persist: false },
|
|
56
|
+
/*
|
|
57
|
+
* 唯一一条把「高级」三段**都配上**的条目(跳板机 + 代理命令 + 主机密钥别名):
|
|
58
|
+
* `ssh-jump` 场景用它验折叠区的默认展开判据——配过却收起来,等于把配置藏了。
|
|
59
|
+
*/
|
|
60
|
+
{
|
|
61
|
+
name: 'bastion-jump',
|
|
62
|
+
host: 'internal.corp',
|
|
63
|
+
port: 22,
|
|
64
|
+
username: 'deploy',
|
|
65
|
+
auth: 'key',
|
|
66
|
+
keyPath: '~/.ssh/id_ed25519',
|
|
67
|
+
passphrase: '',
|
|
68
|
+
password: '',
|
|
69
|
+
agentForward: false,
|
|
70
|
+
persist: false,
|
|
71
|
+
hostKeyAlias: 'corp-internal',
|
|
72
|
+
proxyCommand: 'ssh -W %h:%p bastion.corp',
|
|
73
|
+
jump: { host: 'bastion.corp', port: 2222 },
|
|
74
|
+
},
|
|
56
75
|
],
|
|
57
76
|
hostKeys: [
|
|
58
77
|
{ host: '198.51.100.20', port: 22, fingerprint: 'SHA256:9xQ2mVr7Kp3sTf1cZbLd8uYwAe4nHjR6gPoXkMvQ2Bc' },
|
|
@@ -443,6 +462,11 @@
|
|
|
443
462
|
window.__mockSockets = []
|
|
444
463
|
window.__mockLog = []
|
|
445
464
|
window.__mockFrames = []
|
|
465
|
+
/**
|
|
466
|
+
* 宿主侧会话表的只读快照:预览场景要自己造 `sessions` 帧时用它当基准(#7④ 要逐帧改变
|
|
467
|
+
* 清单——先有这条 agent 会话、下一帧它出表)。返回副本:场景改它不该影响宿主。
|
|
468
|
+
*/
|
|
469
|
+
window.__mockSessionList = () => SESSIONS.map((entry) => ({ ...entry }))
|
|
446
470
|
window.WebSocket = MockSocket
|
|
447
471
|
|
|
448
472
|
/* ---------- module loader ---------- */
|
package/scripts/preview.mjs
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* node scripts/preview.mjs --build # 顺带重建 client.js(默认不重建,产物落后直接报错)
|
|
14
14
|
* node scripts/preview.mjs --theme=light # 浅色主题
|
|
15
15
|
* node scripts/preview.mjs --width=560 # 压窄视口走查窄容器排版(默认 1680)
|
|
16
|
+
* node scripts/preview.mjs --height=560 # 压矮视口走查「内容溢出时头尾还固不固定」(默认 1050)
|
|
16
17
|
* PREVIEW_CHROME_ARGS=--no-sandbox node scripts/preview.mjs # 受限沙箱 / CI 里 Chrome 起不来时
|
|
17
18
|
*
|
|
18
19
|
* 需要本机有 Chrome/Chromium(默认找 playwright 缓存的 Chrome for Testing,
|
|
@@ -46,6 +47,12 @@ const shotsDir = join(previewDir, outName)
|
|
|
46
47
|
* `--width=560` 之类显式压窄。
|
|
47
48
|
*/
|
|
48
49
|
const viewportWidth = Number((argv.find((a) => a.startsWith('--width=')) || '--width=1680').split('=')[1]) || 1680
|
|
50
|
+
/**
|
|
51
|
+
* 视口高度(默认 1050)。**与连接对话框的「头尾固定」直接相关**:那张卡片是
|
|
52
|
+
* `max-height: 86vh`,矮视口下内容才会溢出中段——1050px 高时展开态刚好塞得下,
|
|
53
|
+
* 「滚到底头尾还在不在」这条断言就永远走不到。走查时用 `--height=560` 压矮。
|
|
54
|
+
*/
|
|
55
|
+
const viewportHeight = Number((argv.find((a) => a.startsWith('--height=')) || '--height=1050').split('=')[1]) || 1050
|
|
49
56
|
/**
|
|
50
57
|
* 额外 Chrome 参数(空格分隔)。受限环境(文件沙箱 / CI 容器)里 Chrome 自己的
|
|
51
58
|
* sandbox 起不来,CDP 会一直卡在 `Page.enable` 直到超时——此时用
|
|
@@ -65,8 +72,12 @@ const SCENARIOS = [
|
|
|
65
72
|
['ssh', 'SSH 连接对话框'],
|
|
66
73
|
['ssh-probe', 'SSH 连接对话框(试连结果)'],
|
|
67
74
|
['ssh-edit', 'SSH 连接对话框(编辑)'],
|
|
75
|
+
['ssh-save-book', 'SSH 连接对话框:连接簿名称行常显 + 填名字自动勾上'],
|
|
76
|
+
['ssh-adv', 'SSH 连接对话框:「高级」展开 + 中段滚动(头尾固定)'],
|
|
77
|
+
['ssh-jump', 'SSH 连接对话框:配过高级项的条目默认展开折叠区'],
|
|
68
78
|
['settings', '设置卡片'],
|
|
69
79
|
['settings-assist', '设置卡片:AI 辅助小节(默认关 + 模型路由一个控件)'],
|
|
80
|
+
['settings-shell', '设置卡片:Shell 路径候选表(浮层,不顶动卡片布局)'],
|
|
70
81
|
['settings-docker', '设置卡片(docker 与 tty 并排对照)'],
|
|
71
82
|
['docker-stale-book', 'docker 设置卡片:失效的连接簿引用要看得出来'],
|
|
72
83
|
['tunnel-edit', '端口转发:编辑隧道(回填 / 改端口换名 / 停用的不被启用)'],
|
|
@@ -76,7 +87,13 @@ const SCENARIOS = [
|
|
|
76
87
|
['sftp-fallback', 'SFTP 落点回退(抽屉被容器面板占用 → 对话框)'],
|
|
77
88
|
['dock-pane-tab', '挂载位跟着标签切(切走收起 / 切回恢复 / 不堵死另一个标签的入口)'],
|
|
78
89
|
['minimized', '最小化(侧边栏徽标)'],
|
|
79
|
-
['exited', '
|
|
90
|
+
['exited', '会话退出:不遮输出 + 顶部提示条(issue #7①②)'],
|
|
91
|
+
['clean-exited', '「⋯」里的「清理已退出的标签」(issue #7③)'],
|
|
92
|
+
['clean-exited-apply', '「清理已退出的标签」点下去之后(issue #7③)'],
|
|
93
|
+
['agent-release', 'AI 释放会话 → 标签跟着走(后台当场收 / 正在看的留一台阶,issue #7④)'],
|
|
94
|
+
['agent-release-neighbor', 'AI 释放「被客户端顶上去」的活动标签 → 仍直接收走(4b 现场回归)'],
|
|
95
|
+
['close-confirm', '关面板二次确认:有活会话先问一句(issue #8)'],
|
|
96
|
+
['close-confirm-empty', '关面板二次确认:只剩已退出的标签就不问(issue #8)'],
|
|
80
97
|
['error', '连接错误遮罩'],
|
|
81
98
|
['tunnel', '隧道状态弹层'],
|
|
82
99
|
['connbar-more', '连接栏「⋯」更多(没配隧道的连接也能找到端口转发入口)'],
|
|
@@ -95,6 +112,10 @@ const SCENARIOS = [
|
|
|
95
112
|
['limit-retained', '只读保留(已退出)的会话不算并发名额(D85)'],
|
|
96
113
|
['tab-add', '「+」贴着页签,且标签栏溢出时不跟着滚走(D89)'],
|
|
97
114
|
['tab-list', '标签栏溢出:「⋯」标签列表(切/关/Esc,0.23.0)'],
|
|
115
|
+
['tab-bulk-menu', '标签 ≥ 2 个时的「⋯」批量入口(关闭其他 / 左侧 / 右侧,0.29.0)'],
|
|
116
|
+
['tab-context-menu', '标签右键菜单:以这个标签为参照(0.29.0)'],
|
|
117
|
+
['tab-context-close-others', '右键「关闭其他标签」→ 活会话 ≥ 2 先确认(0.29.0)'],
|
|
118
|
+
['tab-mid-click', '中键关标签(与 ✕ 同一条路,不问,0.29.0)'],
|
|
98
119
|
['tty-assist', 'AI 辅助「失败即解释」:徽标 → 答案 → 填入不回车(0.24.0)'],
|
|
99
120
|
]
|
|
100
121
|
|
|
@@ -536,7 +557,7 @@ async function main() {
|
|
|
536
557
|
await ensureVendor()
|
|
537
558
|
log('启动 headless Chrome(' + theme + ' 主题)')
|
|
538
559
|
const { child, cdp, userDataDir } = await launchChrome()
|
|
539
|
-
await cdp.send('Emulation.setDeviceMetricsOverride', { width: viewportWidth, height:
|
|
560
|
+
await cdp.send('Emulation.setDeviceMetricsOverride', { width: viewportWidth, height: viewportHeight, deviceScaleFactor: 2, mobile: false })
|
|
540
561
|
let failed = 0
|
|
541
562
|
try {
|
|
542
563
|
for (const name of wanted) {
|