dsh-remote-local-plugin 0.0.0-stage → 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.
Files changed (38) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -2
  3. package/assets/dsh-remote-agent-0.2.1.tgz +0 -0
  4. package/cordis.patch.yml +50 -0
  5. package/lib/client.js +1511 -0
  6. package/lib/client.js.map +7 -0
  7. package/lib/index.js +4565 -0
  8. package/lib/types/config.d.ts +94 -0
  9. package/lib/types/credentials/proxy.d.ts +40 -0
  10. package/lib/types/errors.d.ts +23 -0
  11. package/lib/types/host-api/contract.d.ts +217 -0
  12. package/lib/types/host-api/handler.d.ts +15 -0
  13. package/lib/types/host-api/terminal.d.ts +15 -0
  14. package/lib/types/hosts/id.d.ts +16 -0
  15. package/lib/types/hosts/store.d.ts +34 -0
  16. package/lib/types/hosts/types.d.ts +85 -0
  17. package/lib/types/index.d.ts +19 -0
  18. package/lib/types/mirror/service.d.ts +87 -0
  19. package/lib/types/mirror/test-visibility.d.ts +23 -0
  20. package/lib/types/remote/directory.d.ts +19 -0
  21. package/lib/types/remote/files.d.ts +14 -0
  22. package/lib/types/remote/local-directory.d.ts +11 -0
  23. package/lib/types/remote/provisioner.d.ts +32 -0
  24. package/lib/types/remote/terminal.d.ts +55 -0
  25. package/lib/types/rpc/contract.d.ts +114 -0
  26. package/lib/types/rpc/handler.d.ts +12 -0
  27. package/lib/types/service.d.ts +92 -0
  28. package/lib/types/ssh/probe.d.ts +33 -0
  29. package/lib/types/ssh/target.d.ts +24 -0
  30. package/lib/types/ssh/tunnel.d.ts +50 -0
  31. package/lib/types/tools.d.ts +19 -0
  32. package/node_modules/dsh-remote-terminal-controller/README.md +9 -0
  33. package/node_modules/dsh-remote-terminal-controller/cordis.patch.yml +8 -0
  34. package/node_modules/dsh-remote-terminal-controller/lib/client.js +1367 -0
  35. package/node_modules/dsh-remote-terminal-controller/lib/client.js.map +7 -0
  36. package/node_modules/dsh-remote-terminal-controller/lib/index.js +3 -0
  37. package/node_modules/dsh-remote-terminal-controller/package.json +59 -0
  38. package/package.json +146 -4
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/client/index.tsx"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Context } from '@deepseek-ai/cordis'\nimport { ClientTerminals } from '@deepseek-ai/dsh-api-terminal-controller/client'\n\nexport const inject = ['remote', 'remote.terminal', 'connection']\nconst ROUTE = '/api/dsh-remote-terminal'\n\ninterface Handle extends AsyncIterable<unknown> {\n send(item: unknown): void\n end(): void\n dispose(): void\n}\n\nexport function apply(ctx: Context): void {\n const original = (ctx.remote as any).terminal\n const routed = route(original)\n new ClientTerminals(ctx as any, routed)\n}\n\nfunction route(original: any): any {\n const mirrored = new Map<string, Promise<boolean>>()\n const isMirror = (sessionId: string): Promise<boolean> => {\n let pending = mirrored.get(sessionId)\n if (pending === undefined) {\n pending = post({ action: 'context', sessionId })\n .then(value => (value as { mirrored?: boolean } | undefined)?.mirrored === true)\n .catch(() => false)\n mirrored.set(sessionId, pending)\n }\n return pending\n }\n const unary = (name: string) => async (...args: any[]) => {\n const sessionId = String(args[0])\n if (!await isMirror(sessionId)) return original[name](...args)\n const value = await post({ action: name, sessionId, ...payload(name, args) })\n return value === undefined ? original[name](...args) : { ok: true, value }\n }\n return {\n ...original,\n environment: unary('environment'),\n shells: unary('shells'),\n list: unary('list'),\n create: unary('create'),\n rename: unary('rename'),\n close: unary('close'),\n retain: (sessionId: string, id: string, signal: AbortSignal) => {\n const local = original.retain(sessionId, id, signal)\n return (async function* () {\n if (await isMirror(sessionId)) {\n yield { type: 'retained' }\n return\n }\n yield* local\n })()\n },\n attach: (sessionId: string, id: string, signal: AbortSignal) => new RoutedHandle(original, sessionId, id, signal, isMirror),\n }\n}\n\nfunction payload(name: string, args: any[]): Record<string, unknown> {\n if (name === 'create') {\n const request = args[1] ?? {}\n return { id: request.id, cols: request.cols, rows: request.rows, shellPath: request.shellPath }\n }\n if (name === 'rename') return { id: args[1], title: args[2] }\n if (name === 'close') return { id: args[1] }\n return {}\n}\n\nasync function post(payload: Record<string, unknown>): Promise<any> {\n const response = await fetch(ROUTE, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(payload),\n })\n if (!response.ok) return undefined\n const body = await response.json() as { ok?: boolean; value?: unknown; mirrored?: boolean }\n if (body.mirrored !== undefined) return body\n return body.ok === true ? body.value : undefined\n}\n\nclass RoutedHandle implements Handle {\n #original: any\n #sessionId: string\n #id: string\n #signal: AbortSignal\n #isMirror: (sessionId: string) => Promise<boolean>\n #handle: Handle | undefined\n #pending: unknown[] = []\n #controller = new AbortController()\n #opening: Promise<Handle> | undefined\n\n constructor(original: any, sessionId: string, id: string, signal: AbortSignal, isMirror: (sessionId: string) => Promise<boolean>) {\n this.#original = original\n this.#sessionId = sessionId\n this.#id = id\n this.#signal = signal\n this.#isMirror = isMirror\n signal.addEventListener('abort', () => this.#controller.abort(), { once: true })\n }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<unknown> {\n const handle = await this.#open()\n yield* handle\n }\n\n send(item: unknown): void {\n if (this.#handle !== undefined) this.#handle.send(item)\n else this.#pending.push(item)\n }\n\n end(): void { this.#handle?.end() }\n\n dispose(): void {\n this.#controller.abort()\n this.#handle?.dispose()\n }\n\n async #open(): Promise<Handle> {\n if (this.#handle !== undefined) return this.#handle\n this.#opening ??= (async () => {\n const remote = await this.#isMirror(this.#sessionId)\n const handle: Handle = remote\n ? remoteHandle(this.#sessionId, this.#id, this.#controller.signal)\n : this.#original.attach(this.#sessionId, this.#id, this.#signal)\n this.#handle = handle\n for (const item of this.#pending.splice(0)) handle.send(item)\n return handle\n })()\n return this.#opening\n }\n}\n\nfunction remoteHandle(sessionId: string, id: string, signal: AbortSignal): Handle {\n let controller = new AbortController()\n const abort = (): void => controller.abort()\n signal.addEventListener('abort', abort, { once: true })\n return {\n async *[Symbol.asyncIterator]() {\n const response = await fetch(ROUTE, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json', accept: 'text/event-stream' },\n body: JSON.stringify({ action: 'attach', sessionId, id }),\n signal: controller.signal,\n })\n if (!response.ok || response.body === null) throw new Error('remote terminal attach failed')\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n try {\n for (;;) {\n const { done, value } = await reader.read()\n buffer += decoder.decode(value, { stream: !done })\n let newline = buffer.indexOf('\\n')\n while (newline >= 0) {\n const line = buffer.slice(0, newline).replace(/\\r$/u, '')\n buffer = buffer.slice(newline + 1)\n if (line.startsWith('data: ')) {\n const parsed = JSON.parse(line.slice(6).trim())\n if (parsed.message !== undefined && parsed.type === undefined) throw new Error(parsed.message)\n yield parsed\n }\n newline = buffer.indexOf('\\n')\n }\n if (done) return\n }\n } finally {\n reader.releaseLock()\n }\n },\n send(item: unknown) {\n const input = item as { type?: string; data?: string; cols?: number; rows?: number; sequence?: number }\n void post(input.type === 'write'\n ? { action: 'input', sessionId, id, data: input.data ?? '', sequence: input.sequence ?? 0 }\n : { action: 'resize', sessionId, id, cols: input.cols ?? 80, rows: input.rows ?? 24, sequence: input.sequence ?? 0 })\n },\n end() {},\n dispose() { controller.abort() },\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["payload"]
7
+ }
@@ -0,0 +1,3 @@
1
+ // Host half: keep the stock TerminalController implementation unchanged. The
2
+ // client half is what routes local versus mirrored Sessions.
3
+ export { TerminalController as default, TerminalController } from '@deepseek-ai/dsh-api-terminal-controller'
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "dsh-remote-terminal-controller",
3
+ "version": "0.1.2",
4
+ "description": "Terminal controller fork that routes terminals by Session: local Sessions keep the local PTY, mirrored remote Sessions use the plugin's SSH PTY route.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "lib/index.js",
8
+ "exports": {
9
+ ".": "./lib/index.js",
10
+ "./client": "./lib/client.js",
11
+ "./package.json": "./package.json"
12
+ },
13
+ "files": [
14
+ "lib",
15
+ "cordis.patch.yml",
16
+ "README.md"
17
+ ],
18
+ "dsh": {
19
+ "bundle": {
20
+ "patch": "./cordis.patch.yml"
21
+ },
22
+ "client": {
23
+ "platform": "web",
24
+ "inject": [
25
+ "@deepseek-ai/dsh-api-gateway"
26
+ ]
27
+ },
28
+ "compatibility": {
29
+ "dsh": ">=0.2.1-rc.1 <0.3.0-0"
30
+ }
31
+ },
32
+ "scripts": {
33
+ "build": "node scripts/build.mjs"
34
+ },
35
+ "peerDependencies": {
36
+ "@deepseek-ai/dsh-api-terminal-controller": ">=0.2.1-rc.1 <0.3.0-0"
37
+ },
38
+ "peerDependenciesMeta": {
39
+ "@deepseek-ai/dsh-api-terminal-controller": {
40
+ "optional": true
41
+ }
42
+ },
43
+ "devDependencies": {
44
+ "@deepseek-ai/dsh-api-terminal-controller": "0.2.1-rc.2"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/Golden-Pigeon/dsh-remote.git",
49
+ "directory": "packages/terminal-controller"
50
+ },
51
+ "homepage": "https://github.com/Golden-Pigeon/dsh-remote#readme",
52
+ "bugs": {
53
+ "url": "https://github.com/Golden-Pigeon/dsh-remote/issues"
54
+ },
55
+ "author": "Golden-Pigeon",
56
+ "publishConfig": {
57
+ "access": "public"
58
+ }
59
+ }
package/package.json CHANGED
@@ -1,6 +1,148 @@
1
1
  {
2
2
  "name": "dsh-remote-local-plugin",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.8.0",
4
+ "description": "DSH remote-development local plugin: host registry, SSH tunnels, remote workspace/session discovery, an authenticated Connection RPC surface, agent tools, and a Settings page.",
5
+ "keywords": [
6
+ "dsh",
7
+ "dsh-plugin",
8
+ "remote-development",
9
+ "ssh",
10
+ "deepseek-harness"
11
+ ],
12
+ "license": "MIT",
13
+ "type": "module",
14
+ "main": "lib/index.js",
15
+ "types": "lib/types/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./lib/types/index.d.ts",
19
+ "default": "./lib/index.js"
20
+ },
21
+ "./client": {
22
+ "types": "./lib/types/client/index.d.ts",
23
+ "default": "./lib/client.js"
24
+ },
25
+ "./package.json": "./package.json"
26
+ },
27
+ "files": [
28
+ "lib",
29
+ "assets",
30
+ "cordis.patch.yml",
31
+ "README.md",
32
+ "LICENSE"
33
+ ],
34
+ "dsh": {
35
+ "bundle": {
36
+ "patch": "./cordis.patch.yml"
37
+ },
38
+ "client": {
39
+ "platform": "web",
40
+ "inject": [
41
+ "@deepseek-ai/dsh-client-connection",
42
+ "@deepseek-ai/dsh-client-ui-renderer",
43
+ "@deepseek-ai/dsh-client-ui-settings",
44
+ "@deepseek-ai/dsh-client-ui-slots",
45
+ "@deepseek-ai/dsh-client-ui-workspace"
46
+ ]
47
+ },
48
+ "compatibility": {
49
+ "dsh": ">=0.2.1-rc.1 <0.3.0-0"
50
+ }
51
+ },
52
+ "peerDependencies": {
53
+ "@deepseek-ai/cordis": "~4.0.5",
54
+ "@deepseek-ai/dsh-client-connection": ">=0.2.1-rc.1 <0.3.0-0",
55
+ "@deepseek-ai/dsh-client-ui-renderer": ">=0.2.1-rc.1 <0.3.0-0",
56
+ "@deepseek-ai/dsh-client-ui-settings": ">=0.2.1-rc.1 <0.3.0-0",
57
+ "@deepseek-ai/dsh-client-ui-slots": ">=0.2.1-rc.1 <0.3.0-0",
58
+ "@deepseek-ai/dsh-tools": ">=0.2.1-rc.1 <0.3.0-0",
59
+ "@deepseek-ai/schemastery": ">=3.18.0 <4.0.0",
60
+ "react": ">=18.2.0 <19",
61
+ "react-dom": ">=18.2.0 <19",
62
+ "@deepseek-ai/dsh-credentials": ">=0.2.1-rc.1 <0.3.0-0",
63
+ "@deepseek-ai/dsh-agent": ">=0.2.1-rc.1 <0.3.0-0",
64
+ "@deepseek-ai/dsh-session": ">=0.2.1-rc.1 <0.3.0-0",
65
+ "@deepseek-ai/dsh-workspace": ">=0.2.1-rc.1 <0.3.0-0",
66
+ "@deepseek-ai/dsh-client-ui-workspace": ">=0.2.1-rc.1 <0.3.0-0",
67
+ "@deepseek-ai/dsh-scope": ">=0.2.1-rc.1 <0.3.0-0",
68
+ "@deepseek-ai/dsh-user-approval": ">=0.2.1-rc.1 <0.3.0-0",
69
+ "@deepseek-ai/dsh-api-workspace-files": ">=0.2.1-rc.1 <0.3.0-0",
70
+ "@deepseek-ai/dsh-api-terminal-controller": ">=0.2.1-rc.1 <0.3.0-0"
71
+ },
72
+ "peerDependenciesMeta": {
73
+ "@deepseek-ai/cordis": {
74
+ "optional": true
75
+ },
76
+ "@deepseek-ai/dsh-client-connection": {
77
+ "optional": true
78
+ },
79
+ "@deepseek-ai/dsh-client-ui-renderer": {
80
+ "optional": true
81
+ },
82
+ "@deepseek-ai/dsh-client-ui-settings": {
83
+ "optional": true
84
+ },
85
+ "@deepseek-ai/dsh-client-ui-slots": {
86
+ "optional": true
87
+ },
88
+ "@deepseek-ai/dsh-tools": {
89
+ "optional": true
90
+ },
91
+ "@deepseek-ai/schemastery": {
92
+ "optional": true
93
+ },
94
+ "react": {
95
+ "optional": true
96
+ },
97
+ "react-dom": {
98
+ "optional": true
99
+ },
100
+ "@deepseek-ai/dsh-credentials": {
101
+ "optional": true
102
+ },
103
+ "@deepseek-ai/dsh-agent": {
104
+ "optional": true
105
+ },
106
+ "@deepseek-ai/dsh-session": {
107
+ "optional": true
108
+ },
109
+ "@deepseek-ai/dsh-workspace": {
110
+ "optional": true
111
+ },
112
+ "@deepseek-ai/dsh-client-ui-workspace": {
113
+ "optional": true
114
+ },
115
+ "@deepseek-ai/dsh-scope": {
116
+ "optional": true
117
+ },
118
+ "@deepseek-ai/dsh-user-approval": {
119
+ "optional": true
120
+ },
121
+ "@deepseek-ai/dsh-api-workspace-files": {
122
+ "optional": true
123
+ },
124
+ "@deepseek-ai/dsh-api-terminal-controller": {
125
+ "optional": true
126
+ }
127
+ },
128
+ "scripts": {},
129
+ "repository": {
130
+ "type": "git",
131
+ "url": "git+https://github.com/Golden-Pigeon/dsh-remote.git",
132
+ "directory": "packages/local-plugin"
133
+ },
134
+ "homepage": "https://github.com/Golden-Pigeon/dsh-remote#readme",
135
+ "bugs": {
136
+ "url": "https://github.com/Golden-Pigeon/dsh-remote/issues"
137
+ },
138
+ "author": "Golden-Pigeon",
139
+ "publishConfig": {
140
+ "access": "public"
141
+ },
142
+ "dependencies": {
143
+ "dsh-remote-terminal-controller": "0.1.2"
144
+ },
145
+ "bundledDependencies": [
146
+ "dsh-remote-terminal-controller"
147
+ ]
148
+ }