dsh-ssh-tui 0.7.3 → 0.8.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 +101 -27
- package/README.md +83 -27
- package/docs/remote-ops.md +80 -1
- package/docs/terminals.md +17 -4
- package/docs/windows.md +128 -0
- package/lib/attach.js +14 -1
- package/lib/attach.js.map +1 -1
- package/lib/auth-failure.js +92 -0
- package/lib/auth-failure.js.map +1 -0
- package/lib/commands.js +2 -0
- package/lib/commands.js.map +1 -1
- package/lib/copy-text.js +2 -0
- package/lib/copy-text.js.map +1 -1
- package/lib/diag.js +3 -0
- package/lib/diag.js.map +1 -1
- package/lib/dialogs.js.map +1 -1
- package/lib/display-sock.js +313 -2
- package/lib/display-sock.js.map +1 -1
- package/lib/dsh-compat.js +46 -0
- package/lib/dsh-compat.js.map +1 -1
- package/lib/i18n/en.js +49 -14
- package/lib/i18n/en.js.map +1 -1
- package/lib/i18n/index.js +5 -0
- package/lib/i18n/index.js.map +1 -1
- package/lib/i18n/zh.js +49 -14
- package/lib/i18n/zh.js.map +1 -1
- package/lib/index.js +76 -15
- package/lib/index.js.map +1 -1
- package/lib/line-mode.js +4 -0
- package/lib/line-mode.js.map +1 -1
- package/lib/paint.js +32 -1
- package/lib/paint.js.map +1 -1
- package/lib/picker.js +104 -15
- package/lib/picker.js.map +1 -1
- package/lib/plan.js +8 -0
- package/lib/plan.js.map +1 -1
- package/lib/platform.js +81 -0
- package/lib/platform.js.map +1 -1
- package/lib/preset-rows.js +54 -24
- package/lib/preset-rows.js.map +1 -1
- package/lib/question-wait.js +418 -0
- package/lib/question-wait.js.map +1 -0
- package/lib/selection.js +26 -8
- package/lib/selection.js.map +1 -1
- package/lib/term-text.js +79 -8
- package/lib/term-text.js.map +1 -1
- package/lib/terminal-input.js +13 -0
- package/lib/terminal-input.js.map +1 -1
- package/lib/tui.js +713 -51
- package/lib/tui.js.map +1 -1
- package/lib/types/attach.d.ts +8 -0
- package/lib/types/auth-failure.d.ts +48 -0
- package/lib/types/commands.d.ts +6 -0
- package/lib/types/diag.d.ts +2 -0
- package/lib/types/dialogs.d.ts +16 -0
- package/lib/types/display-sock.d.ts +78 -2
- package/lib/types/dsh-compat.d.ts +44 -12
- package/lib/types/i18n/index.d.ts +13 -3
- package/lib/types/index.d.ts +7 -0
- package/lib/types/paint.d.ts +21 -0
- package/lib/types/picker.d.ts +22 -0
- package/lib/types/platform.d.ts +22 -0
- package/lib/types/preset-rows.d.ts +18 -10
- package/lib/types/question-wait.d.ts +221 -0
- package/lib/types/selection.d.ts +12 -4
- package/lib/types/settings-subagent.d.ts +3 -3
- package/lib/types/subagent-model.d.ts +3 -3
- package/lib/types/term-text.d.ts +14 -0
- package/lib/types/terminal-input.d.ts +10 -0
- package/lib/types/transcript-types.d.ts +22 -0
- package/lib/types/tui.d.ts +149 -3
- package/lib/types/update-check.d.ts +19 -4
- package/lib/types/workspace-changes.d.ts +135 -0
- package/lib/update-check.js +25 -8
- package/lib/update-check.js.map +1 -1
- package/lib/workspace-changes.js +120 -0
- package/lib/workspace-changes.js.map +1 -0
- package/package.json +104 -69
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn workspace change cards, read from the Host's `workspaceChanges`
|
|
3
|
+
* service (`@deepseek-ai/dsh-workspace-changes`, shipped with dsh 0.1.7).
|
|
4
|
+
*
|
|
5
|
+
* The service is not a dependency of this plugin: 0.1.5 has neither the
|
|
6
|
+
* package nor the `workspace/changes` event, so everything here is reached by
|
|
7
|
+
* feature detection and the local types below are copied from the service's
|
|
8
|
+
* contract rather than imported. Importing the package would fail to compile
|
|
9
|
+
* on the 0.1.5 tree, where the module does not exist.
|
|
10
|
+
*
|
|
11
|
+
* What the service serves lives only as long as the Session does, in this Host
|
|
12
|
+
* process. After a restart a replayed event resolves to `undefined`, and the
|
|
13
|
+
* upstream decision — which this module honours — is to show no card at all
|
|
14
|
+
* rather than a card whose contents can no longer be opened.
|
|
15
|
+
* @module dsh-ssh-tui/workspace-changes
|
|
16
|
+
*/
|
|
17
|
+
import type { DiffDisplayLine } from './transcript-types.js';
|
|
18
|
+
/** One file changed during a turn. Mirrors the service's `WorkspaceChangedFile`. */
|
|
19
|
+
export interface ChangesFile {
|
|
20
|
+
/** Path relative to the Session working directory, or absolute outside it. */
|
|
21
|
+
path: string;
|
|
22
|
+
/** Sort key and label, always slash-separated. */
|
|
23
|
+
display: string;
|
|
24
|
+
/** Lines added; zero when the file is binary or oversized. */
|
|
25
|
+
added: number;
|
|
26
|
+
/** Lines deleted; zero when the file is binary or oversized. */
|
|
27
|
+
deleted: number;
|
|
28
|
+
/** Git called it binary, or a captured side holds a NUL byte. */
|
|
29
|
+
binary?: true;
|
|
30
|
+
/** A captured side exceeded the plugin's byte cap; listed without counts. */
|
|
31
|
+
oversized?: true;
|
|
32
|
+
}
|
|
33
|
+
/** Files changed during one top-level turn. Mirrors `WorkspaceChangesSummary`. */
|
|
34
|
+
export interface ChangesSummary {
|
|
35
|
+
/** The turn this summary describes. */
|
|
36
|
+
turn: number;
|
|
37
|
+
/** Working directory the `path` values are relative to. */
|
|
38
|
+
cwd: string;
|
|
39
|
+
/** Changed files in `display` order, capped by the plugin's `maxFiles`. */
|
|
40
|
+
files: ChangesFile[];
|
|
41
|
+
/** Complete changed-file count, including files the cap omitted. */
|
|
42
|
+
total: number;
|
|
43
|
+
/** Lines added over every changed file, including omitted ones. */
|
|
44
|
+
added: number;
|
|
45
|
+
/** Lines deleted over every changed file, including omitted ones. */
|
|
46
|
+
deleted: number;
|
|
47
|
+
}
|
|
48
|
+
/** One unified-diff hunk; every line keeps its `+`, `-`, or space prefix. */
|
|
49
|
+
export interface ChangesHunk {
|
|
50
|
+
/** First line in the turn-start content, 1-based. */
|
|
51
|
+
oldStart: number;
|
|
52
|
+
/** Lines taken from the turn-start content. */
|
|
53
|
+
oldLines: number;
|
|
54
|
+
/** First line in the turn-end content, 1-based. */
|
|
55
|
+
newStart: number;
|
|
56
|
+
/** Lines taken from the turn-end content. */
|
|
57
|
+
newLines: number;
|
|
58
|
+
/** Hunk body in order, each line prefixed with `+`, `-`, or a space. */
|
|
59
|
+
lines: string[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* One listed file's comparison, computed when asked for. Mirrors
|
|
63
|
+
* `WorkspaceFileDiff`: a line diff, or a file that has no lines to show.
|
|
64
|
+
*/
|
|
65
|
+
export type ChangesFileDiff = {
|
|
66
|
+
kind: 'text';
|
|
67
|
+
path: string;
|
|
68
|
+
display: string;
|
|
69
|
+
before: boolean;
|
|
70
|
+
after: boolean;
|
|
71
|
+
hunks: ChangesHunk[];
|
|
72
|
+
/** The comparison timed out and every line is shown as replaced. */
|
|
73
|
+
coarse: boolean;
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'binary';
|
|
76
|
+
path: string;
|
|
77
|
+
display: string;
|
|
78
|
+
} | {
|
|
79
|
+
kind: 'oversized';
|
|
80
|
+
path: string;
|
|
81
|
+
display: string;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* The Host service, as far as this plugin reads it. `seq` is the
|
|
85
|
+
* `workspace/changes` event's own sequence number, not the turn number.
|
|
86
|
+
*/
|
|
87
|
+
export interface WorkspaceChangesSource {
|
|
88
|
+
summary(sessionId: string, seq: number): ChangesSummary | undefined;
|
|
89
|
+
diff(sessionId: string, seq: number, index: number, signal: AbortSignal): Promise<ChangesFileDiff | undefined>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The `workspaceChanges` service, when this Host actually has one.
|
|
93
|
+
*
|
|
94
|
+
* Both methods have to be functions: a present-but-incomplete object (a stub,
|
|
95
|
+
* a future shape) must read as "not available" so the event is ignored instead
|
|
96
|
+
* of throwing when the card is built.
|
|
97
|
+
* @param ctx - the Host context.
|
|
98
|
+
* @returns the service, or undefined on a Host that never registered one.
|
|
99
|
+
*/
|
|
100
|
+
export declare function workspaceChangesOf(ctx: {
|
|
101
|
+
get?(name: string): unknown;
|
|
102
|
+
}): WorkspaceChangesSource | undefined;
|
|
103
|
+
/** Whether a summary is worth a card. A turn that changed nothing is not. */
|
|
104
|
+
export declare function changesSummaryVisible(summary: ChangesSummary): boolean;
|
|
105
|
+
/** Collapsed-card header: `本轮改动 · 3 个文件 +42 -7`. */
|
|
106
|
+
export declare function changesHeader(summary: ChangesSummary): string;
|
|
107
|
+
/**
|
|
108
|
+
* One expanded-card file line.
|
|
109
|
+
*
|
|
110
|
+
* Binary and oversized files carry no counts upstream, so naming the file and
|
|
111
|
+
* then printing `+0 -0` would report a change that was not measured. They get
|
|
112
|
+
* a label instead.
|
|
113
|
+
* @param file - one entry of the summary.
|
|
114
|
+
* @returns the line, without the card's indent.
|
|
115
|
+
*/
|
|
116
|
+
export declare function changesFileLine(file: ChangesFile): string;
|
|
117
|
+
/**
|
|
118
|
+
* Files the cap left out, when there are any.
|
|
119
|
+
* @param summary - the turn's summary.
|
|
120
|
+
* @returns the trailing line, or undefined when every file is listed.
|
|
121
|
+
*/
|
|
122
|
+
export declare function changesRemainderLine(summary: ChangesSummary): string | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Render one file's comparison as overlay lines.
|
|
125
|
+
*
|
|
126
|
+
* The service already compared the two sides, so this only maps what it
|
|
127
|
+
* returned: recomputing the diff would be slower and could disagree with the
|
|
128
|
+
* counts the card already showed. A `+` line is an addition, a `-` line a
|
|
129
|
+
* removal, and a space-prefixed line is the unchanged context. Anything else
|
|
130
|
+
* (a hunk line the service did not prefix) is shown as context too — dropping
|
|
131
|
+
* it would hide part of the file.
|
|
132
|
+
* @param diff - the comparison `workspaceChanges.diff` returned.
|
|
133
|
+
* @returns the lines, or an empty list when there is nothing to show.
|
|
134
|
+
*/
|
|
135
|
+
export declare function renderChangesDiff(diff: ChangesFileDiff | undefined): DiffDisplayLine[];
|
package/lib/update-check.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Best-effort npm latest check. Failures stay quiet. The TUI may offer to
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* install the version it just read, by number: `dsh plugin --profile <name>
|
|
4
|
+
* add dsh-ssh-tui@<version>`. A bare package name lets pnpm keep the lockfile
|
|
5
|
+
* pin (e.g. 0.3.7), and `@latest` is resolved a second time at install — under
|
|
6
|
+
* pnpm's `minimumReleaseAge` that second lookup can quietly land on yesterday's
|
|
7
|
+
* release while still exiting 0.
|
|
5
8
|
*/
|
|
6
9
|
import { spawn } from 'node:child_process';
|
|
7
10
|
import { existsSync } from 'node:fs';
|
|
@@ -32,11 +35,24 @@ export function resolvePluginProfileName(env = process.env) {
|
|
|
32
35
|
return arg;
|
|
33
36
|
return 'tui';
|
|
34
37
|
}
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
/**
|
|
39
|
+
* The install command for one already-resolved version.
|
|
40
|
+
*
|
|
41
|
+
* The version is the number `checkForPluginUpdate` read from the registry, not
|
|
42
|
+
* the `latest` dist-tag: handing pnpm the tag makes it resolve the release a
|
|
43
|
+
* second time, and a release younger than `minimumReleaseAge` is then skipped
|
|
44
|
+
* without an error. A caller with no resolved version passes `@latest`, which
|
|
45
|
+
* is still better than a bare name.
|
|
46
|
+
* @param profile - the profile the plugin is installed into.
|
|
47
|
+
* @param version - the exact version to install.
|
|
48
|
+
* @returns the command, safe to show the user and to run.
|
|
49
|
+
*/
|
|
50
|
+
export function pluginUpgradeCommand(profile = resolvePluginProfileName(), version = 'latest') {
|
|
51
|
+
const spec = version.trim() === '' ? 'latest' : version.trim();
|
|
52
|
+
return `dsh plugin --profile ${profile} add ${PLUGIN_PACKAGE}@${spec}`;
|
|
37
53
|
}
|
|
38
54
|
export function formatUpdateNotice(current, latest, profile = resolvePluginProfileName()) {
|
|
39
|
-
return t('update.notice', { latest, current, command: pluginUpgradeCommand(profile) });
|
|
55
|
+
return t('update.notice', { latest, current, command: pluginUpgradeCommand(profile, latest) });
|
|
40
56
|
}
|
|
41
57
|
export async function fetchLatestNpmVersion(fetchImpl = fetch) {
|
|
42
58
|
try {
|
|
@@ -67,7 +83,7 @@ export async function checkForPluginUpdate(current) {
|
|
|
67
83
|
current,
|
|
68
84
|
latest,
|
|
69
85
|
profile,
|
|
70
|
-
command: pluginUpgradeCommand(profile),
|
|
86
|
+
command: pluginUpgradeCommand(profile, latest),
|
|
71
87
|
notice: formatUpdateNotice(current, latest, profile),
|
|
72
88
|
};
|
|
73
89
|
}
|
|
@@ -93,12 +109,13 @@ export function resolveDshInvocation(options = {}) {
|
|
|
93
109
|
export function shellSafeProfile(profile) {
|
|
94
110
|
return /\s/u.test(profile) ? `"${profile.replaceAll('"', '')}"` : profile;
|
|
95
111
|
}
|
|
96
|
-
export async function installPluginLatest(profile = resolvePluginProfileName(), deps = {}) {
|
|
112
|
+
export async function installPluginLatest(profile = resolvePluginProfileName(), version = 'latest', deps = {}) {
|
|
97
113
|
const invocation = deps.invocation ?? resolveDshInvocation();
|
|
98
114
|
const spawnFn = deps.spawnFn ?? spawn;
|
|
99
115
|
const profileArg = invocation.shell ? shellSafeProfile(profile) : profile;
|
|
116
|
+
const spec = version.trim() === '' ? 'latest' : version.trim();
|
|
100
117
|
return await new Promise(resolve => {
|
|
101
|
-
const child = spawnFn(invocation.command, [...invocation.prefix, 'plugin', '--profile', profileArg, 'add', `${PLUGIN_PACKAGE}
|
|
118
|
+
const child = spawnFn(invocation.command, [...invocation.prefix, 'plugin', '--profile', profileArg, 'add', `${PLUGIN_PACKAGE}@${spec}`], {
|
|
102
119
|
env: process.env,
|
|
103
120
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
104
121
|
shell: invocation.shell,
|
package/lib/update-check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn workspace change cards, read from the Host's `workspaceChanges`
|
|
3
|
+
* service (`@deepseek-ai/dsh-workspace-changes`, shipped with dsh 0.1.7).
|
|
4
|
+
*
|
|
5
|
+
* The service is not a dependency of this plugin: 0.1.5 has neither the
|
|
6
|
+
* package nor the `workspace/changes` event, so everything here is reached by
|
|
7
|
+
* feature detection and the local types below are copied from the service's
|
|
8
|
+
* contract rather than imported. Importing the package would fail to compile
|
|
9
|
+
* on the 0.1.5 tree, where the module does not exist.
|
|
10
|
+
*
|
|
11
|
+
* What the service serves lives only as long as the Session does, in this Host
|
|
12
|
+
* process. After a restart a replayed event resolves to `undefined`, and the
|
|
13
|
+
* upstream decision — which this module honours — is to show no card at all
|
|
14
|
+
* rather than a card whose contents can no longer be opened.
|
|
15
|
+
* @module dsh-ssh-tui/workspace-changes
|
|
16
|
+
*/
|
|
17
|
+
import { t } from './i18n/index.js';
|
|
18
|
+
/**
|
|
19
|
+
* The `workspaceChanges` service, when this Host actually has one.
|
|
20
|
+
*
|
|
21
|
+
* Both methods have to be functions: a present-but-incomplete object (a stub,
|
|
22
|
+
* a future shape) must read as "not available" so the event is ignored instead
|
|
23
|
+
* of throwing when the card is built.
|
|
24
|
+
* @param ctx - the Host context.
|
|
25
|
+
* @returns the service, or undefined on a Host that never registered one.
|
|
26
|
+
*/
|
|
27
|
+
export function workspaceChangesOf(ctx) {
|
|
28
|
+
const get = ctx.get;
|
|
29
|
+
if (typeof get !== 'function')
|
|
30
|
+
return undefined;
|
|
31
|
+
const service = get.call(ctx, 'workspaceChanges');
|
|
32
|
+
if (typeof service !== 'object' || service === null)
|
|
33
|
+
return undefined;
|
|
34
|
+
const candidate = service;
|
|
35
|
+
if (typeof candidate.summary !== 'function' || typeof candidate.diff !== 'function')
|
|
36
|
+
return undefined;
|
|
37
|
+
return service;
|
|
38
|
+
}
|
|
39
|
+
/** Whether a summary is worth a card. A turn that changed nothing is not. */
|
|
40
|
+
export function changesSummaryVisible(summary) {
|
|
41
|
+
return summary.total > 0 && summary.files.length > 0;
|
|
42
|
+
}
|
|
43
|
+
/** Collapsed-card header: `本轮改动 · 3 个文件 +42 -7`. */
|
|
44
|
+
export function changesHeader(summary) {
|
|
45
|
+
return t('changes.header', {
|
|
46
|
+
count: summary.total,
|
|
47
|
+
added: summary.added,
|
|
48
|
+
deleted: summary.deleted,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* One expanded-card file line.
|
|
53
|
+
*
|
|
54
|
+
* Binary and oversized files carry no counts upstream, so naming the file and
|
|
55
|
+
* then printing `+0 -0` would report a change that was not measured. They get
|
|
56
|
+
* a label instead.
|
|
57
|
+
* @param file - one entry of the summary.
|
|
58
|
+
* @returns the line, without the card's indent.
|
|
59
|
+
*/
|
|
60
|
+
export function changesFileLine(file) {
|
|
61
|
+
const label = file.display === '' ? file.path : file.display;
|
|
62
|
+
if (file.binary === true)
|
|
63
|
+
return `${label} ${t('changes.binary')}`;
|
|
64
|
+
if (file.oversized === true)
|
|
65
|
+
return `${label} ${t('changes.oversized')}`;
|
|
66
|
+
return `${label} +${file.added} -${file.deleted}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Files the cap left out, when there are any.
|
|
70
|
+
* @param summary - the turn's summary.
|
|
71
|
+
* @returns the trailing line, or undefined when every file is listed.
|
|
72
|
+
*/
|
|
73
|
+
export function changesRemainderLine(summary) {
|
|
74
|
+
const omitted = summary.total - summary.files.length;
|
|
75
|
+
if (omitted <= 0)
|
|
76
|
+
return undefined;
|
|
77
|
+
return t('changes.more', { count: omitted });
|
|
78
|
+
}
|
|
79
|
+
/** `@@ -12,3 +12,4 @@`, the range a hunk covers on each side. */
|
|
80
|
+
function hunkRange(start, lines) {
|
|
81
|
+
return lines === 1 ? String(start) : `${start},${lines}`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Render one file's comparison as overlay lines.
|
|
85
|
+
*
|
|
86
|
+
* The service already compared the two sides, so this only maps what it
|
|
87
|
+
* returned: recomputing the diff would be slower and could disagree with the
|
|
88
|
+
* counts the card already showed. A `+` line is an addition, a `-` line a
|
|
89
|
+
* removal, and a space-prefixed line is the unchanged context. Anything else
|
|
90
|
+
* (a hunk line the service did not prefix) is shown as context too — dropping
|
|
91
|
+
* it would hide part of the file.
|
|
92
|
+
* @param diff - the comparison `workspaceChanges.diff` returned.
|
|
93
|
+
* @returns the lines, or an empty list when there is nothing to show.
|
|
94
|
+
*/
|
|
95
|
+
export function renderChangesDiff(diff) {
|
|
96
|
+
if (diff === undefined)
|
|
97
|
+
return [];
|
|
98
|
+
if (diff.kind === 'binary')
|
|
99
|
+
return [{ kind: 'tool-result', text: t('changes.binaryFile') }];
|
|
100
|
+
if (diff.kind === 'oversized')
|
|
101
|
+
return [{ kind: 'tool-result', text: t('changes.oversizedFile') }];
|
|
102
|
+
const lines = [];
|
|
103
|
+
if (diff.coarse)
|
|
104
|
+
lines.push({ kind: 'tool-result', text: t('changes.coarse') });
|
|
105
|
+
for (const hunk of diff.hunks) {
|
|
106
|
+
lines.push({
|
|
107
|
+
kind: 'diff-path',
|
|
108
|
+
text: `@@ -${hunkRange(hunk.oldStart, hunk.oldLines)} +${hunkRange(hunk.newStart, hunk.newLines)} @@`,
|
|
109
|
+
});
|
|
110
|
+
for (const raw of hunk.lines) {
|
|
111
|
+
const prefix = raw.charAt(0);
|
|
112
|
+
lines.push({
|
|
113
|
+
kind: prefix === '+' ? 'diff-add' : prefix === '-' ? 'diff-del' : 'tool-result',
|
|
114
|
+
text: raw,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return lines;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=workspace-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-changes.js","sourceRoot":"","sources":["../src/workspace-changes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-ssh-tui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "SSH-friendly interactive terminal TUI plugin for DeepSeek Harness",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -59,7 +59,8 @@
|
|
|
59
59
|
"docs/screenshots/workspace.png",
|
|
60
60
|
"docs/screenshots/slow-link.gif",
|
|
61
61
|
"LICENSE",
|
|
62
|
-
"docs/terminals.md"
|
|
62
|
+
"docs/terminals.md",
|
|
63
|
+
"docs/windows.md"
|
|
63
64
|
],
|
|
64
65
|
"license": "MIT",
|
|
65
66
|
"dsh": {
|
|
@@ -67,17 +68,19 @@
|
|
|
67
68
|
"patch": "./cordis.patch.yml"
|
|
68
69
|
},
|
|
69
70
|
"compatibility": {
|
|
70
|
-
"dsh": ">=0.1.
|
|
71
|
+
"dsh": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
71
72
|
"dshReleases": {
|
|
72
73
|
"0.1.2-rc.1": "incompatible",
|
|
73
|
-
"0.1.3-alpha.1": "
|
|
74
|
-
"0.1.3-alpha.2": "
|
|
75
|
-
"0.1.5-alpha.1": "
|
|
76
|
-
"0.1.5-alpha.2": "
|
|
77
|
-
"0.1.5-rc.1": "
|
|
78
|
-
"0.1.5-rc.2": "
|
|
79
|
-
"0.1.5-rc.3": "
|
|
80
|
-
"0.1.7-rc.1": "compatible"
|
|
74
|
+
"0.1.3-alpha.1": "incompatible",
|
|
75
|
+
"0.1.3-alpha.2": "incompatible",
|
|
76
|
+
"0.1.5-alpha.1": "incompatible",
|
|
77
|
+
"0.1.5-alpha.2": "incompatible",
|
|
78
|
+
"0.1.5-rc.1": "incompatible",
|
|
79
|
+
"0.1.5-rc.2": "incompatible",
|
|
80
|
+
"0.1.5-rc.3": "incompatible",
|
|
81
|
+
"0.1.7-rc.1": "compatible",
|
|
82
|
+
"0.1.7-rc.2": "compatible",
|
|
83
|
+
"0.2.0-rc.1": "compatible"
|
|
81
84
|
},
|
|
82
85
|
"profiles": [
|
|
83
86
|
"tui"
|
|
@@ -92,10 +95,10 @@
|
|
|
92
95
|
"prepare": "npm run build",
|
|
93
96
|
"prepack": "npm run build",
|
|
94
97
|
"prepublishOnly": "npm run typecheck",
|
|
95
|
-
"install:dsh": "
|
|
96
|
-
"install:npm": "
|
|
97
|
-
"uninstall:dsh": "
|
|
98
|
-
"verify:dsh": "
|
|
98
|
+
"install:dsh": "node scripts/install.mjs",
|
|
99
|
+
"install:npm": "node scripts/install-npm.mjs",
|
|
100
|
+
"uninstall:dsh": "node scripts/uninstall.mjs",
|
|
101
|
+
"verify:dsh": "node scripts/verify.mjs",
|
|
99
102
|
"probe:home": "node scripts/probe-home.mjs --probe",
|
|
100
103
|
"probe:home:drop": "node scripts/probe-home.mjs --probe --script tui-drop-probe.mjs",
|
|
101
104
|
"screenshots": "npm run build && node scripts/capture-readme-frames.mjs",
|
|
@@ -110,22 +113,21 @@
|
|
|
110
113
|
},
|
|
111
114
|
"peerDependencies": {
|
|
112
115
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
113
|
-
"@deepseek-ai/dsh-agent": ">=0.1.
|
|
114
|
-
"@deepseek-ai/dsh-agent-default-model": ">=0.1.
|
|
115
|
-
"@deepseek-ai/dsh-agent-loop": ">=0.1.
|
|
116
|
-
"@deepseek-ai/dsh-agent-preset": ">=0.1.7-rc.1 <0.1.8",
|
|
117
|
-
"@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-rc.1 <0.1.8",
|
|
118
|
-
"@deepseek-ai/dsh-
|
|
119
|
-
"@deepseek-ai/dsh-
|
|
120
|
-
"@deepseek-ai/dsh-
|
|
121
|
-
"@deepseek-ai/dsh-
|
|
122
|
-
"@deepseek-ai/dsh-
|
|
123
|
-
"@deepseek-ai/dsh-session": ">=0.1.
|
|
124
|
-
"@deepseek-ai/dsh-
|
|
125
|
-
"@deepseek-ai/dsh-
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/dsh-user-
|
|
128
|
-
"@deepseek-ai/dsh-user-questions": ">=0.1.3-alpha.2 <0.1.6 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.7-rc.1 <0.1.8"
|
|
116
|
+
"@deepseek-ai/dsh-agent": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
117
|
+
"@deepseek-ai/dsh-agent-default-model": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
118
|
+
"@deepseek-ai/dsh-agent-loop": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
119
|
+
"@deepseek-ai/dsh-agent-preset": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
120
|
+
"@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
121
|
+
"@deepseek-ai/dsh-cmdline": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
122
|
+
"@deepseek-ai/dsh-commands": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
123
|
+
"@deepseek-ai/dsh-credentials": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
124
|
+
"@deepseek-ai/dsh-llm": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
125
|
+
"@deepseek-ai/dsh-session": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
126
|
+
"@deepseek-ai/dsh-session-persistence": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
127
|
+
"@deepseek-ai/dsh-settings": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
128
|
+
"@deepseek-ai/dsh-subagent": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
129
|
+
"@deepseek-ai/dsh-user-approval": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1",
|
|
130
|
+
"@deepseek-ai/dsh-user-questions": ">=0.1.7-rc.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1"
|
|
129
131
|
},
|
|
130
132
|
"peerDependenciesMeta": {
|
|
131
133
|
"@deepseek-ai/dsh-agent-preset": {
|
|
@@ -134,9 +136,6 @@
|
|
|
134
136
|
"@deepseek-ai/dsh-agent-preset-registry": {
|
|
135
137
|
"optional": true
|
|
136
138
|
},
|
|
137
|
-
"@deepseek-ai/dsh-agent-presets": {
|
|
138
|
-
"optional": true
|
|
139
|
-
},
|
|
140
139
|
"@deepseek-ai/dsh-credentials": {
|
|
141
140
|
"optional": true
|
|
142
141
|
},
|
|
@@ -151,45 +150,81 @@
|
|
|
151
150
|
}
|
|
152
151
|
},
|
|
153
152
|
"devDependencies": {
|
|
154
|
-
"@deepseek-ai/cordis": "4.0.
|
|
153
|
+
"@deepseek-ai/cordis": "4.0.4",
|
|
154
|
+
"@deepseek-ai/cordis-plugin-group": "1.0.4",
|
|
155
155
|
"@deepseek-ai/cordis-plugin-hmr": "1.0.17",
|
|
156
|
-
"@deepseek-ai/cordis-plugin-include": "1.0.
|
|
157
|
-
"@deepseek-ai/cordis-plugin-loader": "1.0.
|
|
158
|
-
"@deepseek-ai/cordis-plugin-timer": "1.1.
|
|
159
|
-
"@deepseek-ai/dsh": "0.
|
|
160
|
-
"@deepseek-ai/dsh-agent": "0.
|
|
161
|
-
"@deepseek-ai/dsh-agent-default-model": "0.
|
|
162
|
-
"@deepseek-ai/dsh-agent-loop": "0.
|
|
163
|
-
"@deepseek-ai/dsh-agent-
|
|
164
|
-
"@deepseek-ai/dsh-
|
|
165
|
-
"@deepseek-ai/dsh-
|
|
166
|
-
"@deepseek-ai/dsh-
|
|
167
|
-
"@deepseek-ai/dsh-
|
|
168
|
-
"@deepseek-ai/dsh-
|
|
169
|
-
"@deepseek-ai/dsh-
|
|
170
|
-
"@deepseek-ai/dsh-
|
|
171
|
-
"@deepseek-ai/dsh-
|
|
172
|
-
"@deepseek-ai/dsh-
|
|
173
|
-
"@deepseek-ai/dsh-
|
|
174
|
-
"@deepseek-ai/dsh-llm
|
|
175
|
-
"@deepseek-ai/dsh-
|
|
176
|
-
"@deepseek-ai/dsh-sandbox
|
|
177
|
-
"@deepseek-ai/dsh-
|
|
178
|
-
"@deepseek-ai/dsh-
|
|
179
|
-
"@deepseek-ai/dsh-session
|
|
180
|
-
"@deepseek-ai/dsh-session-
|
|
181
|
-
"@deepseek-ai/dsh-session-projection
|
|
182
|
-
"@deepseek-ai/dsh-
|
|
183
|
-
"@deepseek-ai/dsh-
|
|
184
|
-
"@deepseek-ai/dsh-
|
|
185
|
-
"@deepseek-ai/dsh-
|
|
186
|
-
"@deepseek-ai/dsh-
|
|
187
|
-
"@deepseek-ai/dsh-
|
|
188
|
-
"@deepseek-ai/dsh-
|
|
189
|
-
"@deepseek-ai/dsh-user-
|
|
156
|
+
"@deepseek-ai/cordis-plugin-include": "1.0.9",
|
|
157
|
+
"@deepseek-ai/cordis-plugin-loader": "1.0.5",
|
|
158
|
+
"@deepseek-ai/cordis-plugin-timer": "1.1.6",
|
|
159
|
+
"@deepseek-ai/dsh": "0.2.0-rc.1",
|
|
160
|
+
"@deepseek-ai/dsh-agent": "0.2.0-rc.1",
|
|
161
|
+
"@deepseek-ai/dsh-agent-default-model": "0.2.0-rc.1",
|
|
162
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.0-rc.1",
|
|
163
|
+
"@deepseek-ai/dsh-agent-preset": "0.2.0-rc.1",
|
|
164
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.1",
|
|
165
|
+
"@deepseek-ai/dsh-atomic-write": "0.2.0-rc.1",
|
|
166
|
+
"@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
|
|
167
|
+
"@deepseek-ai/dsh-brand": "0.2.0-rc.1",
|
|
168
|
+
"@deepseek-ai/dsh-cmdline": "0.2.0-rc.1",
|
|
169
|
+
"@deepseek-ai/dsh-commands": "0.2.0-rc.1",
|
|
170
|
+
"@deepseek-ai/dsh-credentials": "0.2.0-rc.1",
|
|
171
|
+
"@deepseek-ai/dsh-home-paths": "0.2.0-rc.1",
|
|
172
|
+
"@deepseek-ai/dsh-invariants": "0.2.0-rc.1",
|
|
173
|
+
"@deepseek-ai/dsh-jobs": "0.2.0-rc.1",
|
|
174
|
+
"@deepseek-ai/dsh-llm": "0.2.0-rc.1",
|
|
175
|
+
"@deepseek-ai/dsh-llm-mock-server": "0.2.0-rc.1",
|
|
176
|
+
"@deepseek-ai/dsh-sandbox": "0.2.0-rc.1",
|
|
177
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.1",
|
|
178
|
+
"@deepseek-ai/dsh-scope": "0.2.0-rc.1",
|
|
179
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.1",
|
|
180
|
+
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.1",
|
|
181
|
+
"@deepseek-ai/dsh-session-projection": "0.2.0-rc.1",
|
|
182
|
+
"@deepseek-ai/dsh-session-projection-cache": "0.2.0-rc.1",
|
|
183
|
+
"@deepseek-ai/dsh-settings": "0.2.0-rc.1",
|
|
184
|
+
"@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
|
|
185
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
|
|
186
|
+
"@deepseek-ai/dsh-timeout": "0.2.0-rc.1",
|
|
187
|
+
"@deepseek-ai/dsh-tools": "0.2.0-rc.1",
|
|
188
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.1",
|
|
189
|
+
"@deepseek-ai/dsh-user-approval": "0.2.0-rc.1",
|
|
190
|
+
"@deepseek-ai/dsh-user-questions": "0.2.0-rc.1",
|
|
190
191
|
"@types/node": "^24.0.0",
|
|
191
192
|
"@xterm/headless": "^6.0.0",
|
|
192
193
|
"semver": "^7.8.5",
|
|
193
194
|
"typescript": "^5.9.0"
|
|
195
|
+
},
|
|
196
|
+
"overrides": {
|
|
197
|
+
"@deepseek-ai/dsh": "0.2.0-rc.1",
|
|
198
|
+
"@deepseek-ai/dsh-agent": "0.2.0-rc.1",
|
|
199
|
+
"@deepseek-ai/dsh-agent-default-model": "0.2.0-rc.1",
|
|
200
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.0-rc.1",
|
|
201
|
+
"@deepseek-ai/dsh-agent-preset": "0.2.0-rc.1",
|
|
202
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.1",
|
|
203
|
+
"@deepseek-ai/dsh-atomic-write": "0.2.0-rc.1",
|
|
204
|
+
"@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
|
|
205
|
+
"@deepseek-ai/dsh-brand": "0.2.0-rc.1",
|
|
206
|
+
"@deepseek-ai/dsh-cmdline": "0.2.0-rc.1",
|
|
207
|
+
"@deepseek-ai/dsh-commands": "0.2.0-rc.1",
|
|
208
|
+
"@deepseek-ai/dsh-credentials": "0.2.0-rc.1",
|
|
209
|
+
"@deepseek-ai/dsh-home-paths": "0.2.0-rc.1",
|
|
210
|
+
"@deepseek-ai/dsh-invariants": "0.2.0-rc.1",
|
|
211
|
+
"@deepseek-ai/dsh-jobs": "0.2.0-rc.1",
|
|
212
|
+
"@deepseek-ai/dsh-llm": "0.2.0-rc.1",
|
|
213
|
+
"@deepseek-ai/dsh-llm-mock-server": "0.2.0-rc.1",
|
|
214
|
+
"@deepseek-ai/dsh-sandbox": "0.2.0-rc.1",
|
|
215
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.1",
|
|
216
|
+
"@deepseek-ai/dsh-scope": "0.2.0-rc.1",
|
|
217
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.1",
|
|
218
|
+
"@deepseek-ai/dsh-session-persistence": "0.2.0-rc.1",
|
|
219
|
+
"@deepseek-ai/dsh-session-projection": "0.2.0-rc.1",
|
|
220
|
+
"@deepseek-ai/dsh-session-projection-cache": "0.2.0-rc.1",
|
|
221
|
+
"@deepseek-ai/dsh-settings": "0.2.0-rc.1",
|
|
222
|
+
"@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
|
|
223
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
|
|
224
|
+
"@deepseek-ai/dsh-timeout": "0.2.0-rc.1",
|
|
225
|
+
"@deepseek-ai/dsh-tools": "0.2.0-rc.1",
|
|
226
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.1",
|
|
227
|
+
"@deepseek-ai/dsh-user-approval": "0.2.0-rc.1",
|
|
228
|
+
"@deepseek-ai/dsh-user-questions": "0.2.0-rc.1"
|
|
194
229
|
}
|
|
195
230
|
}
|