dsh-ssh-tui 0.8.2-rc.1 → 0.8.3
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 +34 -2
- package/README.en.md +78 -7
- package/README.md +61 -12
- package/docs/release-notes-0.8.2.md +64 -0
- package/docs/release-notes-0.8.3.md +72 -0
- package/docs/screenshots/reconnect.gif +0 -0
- package/docs/terminals.md +23 -0
- package/lib/tui.js +200 -28
- package/lib/tui.js.map +1 -1
- package/lib/types/tui.d.ts +32 -4
- package/package.json +11 -5
package/lib/types/tui.d.ts
CHANGED
|
@@ -2166,18 +2166,36 @@ export declare class SshTui {
|
|
|
2166
2166
|
* A paste is text input, so it goes through the same ownership question ordinary
|
|
2167
2167
|
* typing does: into the composer's draft when the composer owns the keyboard, and
|
|
2168
2168
|
* into a borrowed field when a surface that has one does. A surface without a
|
|
2169
|
-
* text field (a confirmation,
|
|
2169
|
+
* text field (a confirmation, a menu, a report) takes no paste at all — the
|
|
2170
2170
|
* alternative was writing the composer's hidden draft behind it, which is how a
|
|
2171
2171
|
* paste into an approval dialog could silently rewrite the message being written.
|
|
2172
|
+
*
|
|
2173
|
+
* A **Screen** is that same question with a different answer, and it is asked
|
|
2174
|
+
* first because `textIsEditable()` only ever answers for the composer's field: the
|
|
2175
|
+
* setup Screen keeps a field of its own, which the composer's helpers cannot see
|
|
2176
|
+
* and must never be handed (B2.6 §4).
|
|
2172
2177
|
*/
|
|
2173
2178
|
private handlePasteText;
|
|
2179
|
+
/**
|
|
2180
|
+
* Give a paste to the field the Screen owns, or to nobody.
|
|
2181
|
+
*
|
|
2182
|
+
* The setup Screen is the only Screen with a field, and it is the one place a
|
|
2183
|
+
* paste matters most: an API key, a base URL and a model list are all copied from
|
|
2184
|
+
* somewhere else, and a first run that could only be typed by hand is the
|
|
2185
|
+
* difference between a working session and an empty one. A step without a field —
|
|
2186
|
+
* the model pickers, the confirmation — is not a text field, so the paste is
|
|
2187
|
+
* dropped exactly as a menu drops it: a paste is text, never an answer.
|
|
2188
|
+
*/
|
|
2189
|
+
private pasteIntoScreen;
|
|
2174
2190
|
/**
|
|
2175
2191
|
* Whether the keys that edit text belong to a field right now.
|
|
2176
2192
|
*
|
|
2177
2193
|
* The composer always has one; an open surface only has one when it borrowed it
|
|
2178
|
-
* (a free-text answer
|
|
2179
|
-
*
|
|
2180
|
-
* must do nothing rather than reach the draft behind the surface.
|
|
2194
|
+
* (a free-text answer). Everything else — a confirmation, a menu, the inspect
|
|
2195
|
+
* overlay, every Screen — owns the keyboard without owning the composer's text,
|
|
2196
|
+
* and those keys must do nothing rather than reach the draft behind the surface.
|
|
2197
|
+
* A Screen is included by name: the setup Screen has a field of its own, and it
|
|
2198
|
+
* is reached through the Screen's own keys, never through the composer's.
|
|
2181
2199
|
*/
|
|
2182
2200
|
private textIsEditable;
|
|
2183
2201
|
private handlePlainText;
|
|
@@ -2272,6 +2290,16 @@ export declare class SshTui {
|
|
|
2272
2290
|
/** Fetch the endpoint's model list into the onboarding wizard's models step. */
|
|
2273
2291
|
private fetchOnboardingModels;
|
|
2274
2292
|
private saveOnboarding;
|
|
2293
|
+
/**
|
|
2294
|
+
* Say the wizard is done, where the reader will still be able to read it.
|
|
2295
|
+
*
|
|
2296
|
+
* A saved wizard closes its Screen in the same frame, so its own notice row would
|
|
2297
|
+
* be painted for no frames at all — and the credential line that goes with it is a
|
|
2298
|
+
* footer echo (`command-feedback`), which expires. This is the durable half of the
|
|
2299
|
+
* answer: `command-status` routes to the transcript, exactly like the boot line
|
|
2300
|
+
* that asked for the setup in the first place.
|
|
2301
|
+
*/
|
|
2302
|
+
private onboardDone;
|
|
2275
2303
|
/** Store one credential, falling back to a launch-environment override on shadow/absence. */
|
|
2276
2304
|
private saveCredential;
|
|
2277
2305
|
/** Write launch-environment overrides so they beat system-injected variables. */
|
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-ssh-tui",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.8.3",
|
|
4
|
+
"description": "Remote-first terminal UI for DeepSeek Harness with SSH reconnect, Windows/ConPTY and incremental ANSI rendering.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
7
7
|
"dsh",
|
|
8
8
|
"dsh-plugin",
|
|
9
|
-
"plugin",
|
|
10
9
|
"tui",
|
|
11
10
|
"terminal",
|
|
12
11
|
"ssh",
|
|
13
|
-
"
|
|
12
|
+
"coding-agent",
|
|
13
|
+
"cli",
|
|
14
|
+
"remote-development",
|
|
15
|
+
"windows-terminal",
|
|
16
|
+
"conpty"
|
|
14
17
|
],
|
|
15
18
|
"author": "cyjyyd",
|
|
16
19
|
"repository": {
|
|
@@ -58,6 +61,7 @@
|
|
|
58
61
|
"docs/screenshots/headless.png",
|
|
59
62
|
"docs/screenshots/workspace.png",
|
|
60
63
|
"docs/screenshots/slow-link.gif",
|
|
64
|
+
"docs/screenshots/reconnect.gif",
|
|
61
65
|
"LICENSE",
|
|
62
66
|
"docs/display-mode.md",
|
|
63
67
|
"docs/terminals.md",
|
|
@@ -108,7 +112,9 @@
|
|
|
108
112
|
"probe:home": "node scripts/probe-home.mjs --probe",
|
|
109
113
|
"probe:home:drop": "node scripts/probe-home.mjs --probe --script tui-drop-probe.mjs",
|
|
110
114
|
"screenshots": "npm run build && node scripts/capture-readme-frames.mjs",
|
|
111
|
-
"screenshots:slow": "npm run build && node scripts/capture-slow-link.mjs"
|
|
115
|
+
"screenshots:slow": "npm run build && node scripts/capture-slow-link.mjs",
|
|
116
|
+
"screenshots:reconnect": "npm run build && node scripts/capture-reconnect.mjs",
|
|
117
|
+
"bench:report": "node scripts/bench-report.mjs"
|
|
112
118
|
},
|
|
113
119
|
"engines": {
|
|
114
120
|
"node": ">=22.19"
|