dsh-ssh-tui 0.3.4 → 0.3.5

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.
@@ -0,0 +1,26 @@
1
+ export interface SessionLockInfo {
2
+ pid: number;
3
+ sessionId: string;
4
+ startedAt: string;
5
+ tty?: string;
6
+ }
7
+ export declare class SessionLockHeldError extends Error {
8
+ readonly lock: SessionLockInfo;
9
+ readonly path: string;
10
+ constructor(lock: SessionLockInfo, path: string);
11
+ }
12
+ export declare function sessionLockPath(sessionId: string, dshHome?: string): string;
13
+ export declare function parseSessionLock(raw: string): SessionLockInfo | undefined;
14
+ /** True when `pid` still exists on this machine (best-effort). */
15
+ export declare function processIsAlive(pid: number): boolean;
16
+ export declare function formatLockHeldMessage(lock: SessionLockInfo): string;
17
+ export declare function sessionLockDisabled(env?: NodeJS.ProcessEnv): boolean;
18
+ export declare function acquireSessionLock(sessionId: string, options?: {
19
+ pid?: number;
20
+ tty?: string | null;
21
+ dshHome?: string;
22
+ }): Promise<{
23
+ path: string;
24
+ info: SessionLockInfo;
25
+ }>;
26
+ export declare function releaseSessionLock(path: string, pid?: number): Promise<void>;
@@ -508,6 +508,7 @@ export declare class SshTui {
508
508
  constructor(ctx: Context, agent: Agent, config: TuiConfig);
509
509
  /** Enter raw mode, switch to the alternate screen, and start listening. */
510
510
  start(): void;
511
+ private notifyPluginUpdate;
511
512
  private startRenderTimer;
512
513
  private calibratePaintInterval;
513
514
  /** Replay the durable session log so a resumed session renders its history. */
@@ -0,0 +1,4 @@
1
+ export declare function compareSemver(a: string, b: string): number;
2
+ export declare function formatUpdateNotice(current: string, latest: string): string;
3
+ export declare function fetchLatestNpmVersion(fetchImpl?: typeof fetch): Promise<string | undefined>;
4
+ export declare function checkForPluginUpdate(current: string): Promise<string | undefined>;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Best-effort npm latest check. Never auto-upgrades; failures stay quiet.
3
+ */
4
+ const NPM_REGISTRY = 'https://registry.npmjs.org/dsh-ssh-tui/latest';
5
+ const CHECK_TIMEOUT_MS = 4000;
6
+ export function compareSemver(a, b) {
7
+ const parse = (value) => {
8
+ const core = value.trim().replace(/^v/u, '').split('-')[0] ?? '0';
9
+ const parts = core.split('.').map(part => Number.parseInt(part, 10));
10
+ return [0, 1, 2].map(i => Number.isFinite(parts[i]) ? parts[i] : 0);
11
+ };
12
+ const left = parse(a);
13
+ const right = parse(b);
14
+ for (let i = 0; i < 3; i++) {
15
+ if (left[i] !== right[i])
16
+ return left[i] - right[i];
17
+ }
18
+ return 0;
19
+ }
20
+ export function formatUpdateNotice(current, latest) {
21
+ return `发现新版本 dsh-ssh-tui ${latest}(当前 ${current})。更新:dsh plugin --profile tui add dsh-ssh-tui`;
22
+ }
23
+ export async function fetchLatestNpmVersion(fetchImpl = fetch) {
24
+ try {
25
+ const response = await fetchImpl(NPM_REGISTRY, {
26
+ headers: { accept: 'application/json' },
27
+ signal: AbortSignal.timeout(CHECK_TIMEOUT_MS),
28
+ });
29
+ if (!response.ok)
30
+ return undefined;
31
+ const body = await response.json();
32
+ return typeof body.version === 'string' && body.version.trim() !== '' ? body.version.trim() : undefined;
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ export async function checkForPluginUpdate(current) {
39
+ if (process.env.DSH_TUI_NO_UPDATE_CHECK === '1' || process.env.DSH_TUI_NO_UPDATE_CHECK === 'true') {
40
+ return undefined;
41
+ }
42
+ const latest = await fetchLatestNpmVersion();
43
+ if (latest === undefined)
44
+ return undefined;
45
+ if (compareSemver(latest, current) <= 0)
46
+ return undefined;
47
+ return formatUpdateNotice(current, latest);
48
+ }
49
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,YAAY,GAAG,+CAA+C,CAAA;AACpE,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAE7B,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAY,EAAE;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACpE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,CAAC,CAAE,KAAK,KAAK,CAAC,CAAC,CAAE;YAAE,OAAO,IAAI,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;IACzD,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAc;IAChE,OAAO,qBAAqB,MAAM,OAAO,OAAO,+CAA+C,CAAA;AACjG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAA0B,KAAK;IAE/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE;YAC7C,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;YACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;SAC9C,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,SAAS,CAAA;QAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2B,CAAA;QAC3D,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACzG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM,EAAE,CAAC;QAClG,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAA;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACzD,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "dsh-ssh-tui",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "SSH-friendly interactive terminal TUI plugin for DeepSeek Harness",
5
5
  "keywords": [
6
6
  "deepseek-harness",
7
7
  "dsh",
8
+ "dsh-plugin",
8
9
  "plugin",
9
10
  "tui",
10
11
  "terminal",
11
- "ssh"
12
+ "ssh",
13
+ "cordis"
12
14
  ],
13
15
  "author": "cyjyyd",
14
16
  "repository": {