@termaxjs/web-adapter 0.1.1
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/LICENSE +201 -0
- package/dist/electron/index.d.ts +57 -0
- package/dist/electron/index.d.ts.map +1 -0
- package/dist/electron/index.js +142 -0
- package/dist/electron/index.js.map +1 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/mock/index.d.ts +54 -0
- package/dist/mock/index.d.ts.map +1 -0
- package/dist/mock/index.js +249 -0
- package/dist/mock/index.js.map +1 -0
- package/dist/remote/index.d.ts +58 -0
- package/dist/remote/index.d.ts.map +1 -0
- package/dist/remote/index.js +181 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/tauri/index.d.ts +53 -0
- package/dist/tauri/index.d.ts.map +1 -0
- package/dist/tauri/index.js +142 -0
- package/dist/tauri/index.js.map +1 -0
- package/dist/web/index.d.ts +22 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +107 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
export class InMemoryPtyAdapter {
|
|
2
|
+
nextId = 1;
|
|
3
|
+
listeners = new Map();
|
|
4
|
+
lineBuffers = new Map();
|
|
5
|
+
welcomeBanner;
|
|
6
|
+
prompt;
|
|
7
|
+
virtualFiles;
|
|
8
|
+
onCommand;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.welcomeBanner =
|
|
11
|
+
options?.welcomeBanner ??
|
|
12
|
+
"\x1b[1;36mTermax Web Sandbox\x1b[0m\r\nType \x1b[33mhelp\x1b[0m to view available sandbox commands.\r\n\r\n";
|
|
13
|
+
this.prompt = options?.prompt ?? "$ ";
|
|
14
|
+
this.virtualFiles = options?.virtualFiles ?? {
|
|
15
|
+
"README.md": "# Welcome to Termax\r\nA lightweight, modern terminal & code editor ecosystem.\r\n",
|
|
16
|
+
"package.json": '{\r\n "name": "termax-sandbox",\r\n "version": "0.1.0"\r\n}\r\n',
|
|
17
|
+
};
|
|
18
|
+
this.onCommand = options?.onCommand;
|
|
19
|
+
}
|
|
20
|
+
async spawn(_options) {
|
|
21
|
+
const id = this.nextId++;
|
|
22
|
+
this.listeners.set(id, new Set());
|
|
23
|
+
this.lineBuffers.set(id, "");
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
this.emit(id, this.welcomeBanner + this.prompt);
|
|
26
|
+
}, 10);
|
|
27
|
+
return id;
|
|
28
|
+
}
|
|
29
|
+
async write(id, data) {
|
|
30
|
+
const text = typeof data === "string" ? data : new TextDecoder().decode(data);
|
|
31
|
+
let buf = this.lineBuffers.get(id) ?? "";
|
|
32
|
+
for (let i = 0; i < text.length; i++) {
|
|
33
|
+
const char = text[i];
|
|
34
|
+
if (char === "\r") {
|
|
35
|
+
this.emit(id, "\r\n");
|
|
36
|
+
const trimmed = buf.trim();
|
|
37
|
+
this.lineBuffers.set(id, "");
|
|
38
|
+
if (trimmed.length > 0) {
|
|
39
|
+
await this.executeCommand(id, trimmed);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.emit(id, this.prompt);
|
|
43
|
+
}
|
|
44
|
+
buf = "";
|
|
45
|
+
}
|
|
46
|
+
else if (char === "\x7f" || char === "\b") {
|
|
47
|
+
if (buf.length > 0) {
|
|
48
|
+
buf = buf.slice(0, -1);
|
|
49
|
+
this.lineBuffers.set(id, buf);
|
|
50
|
+
this.emit(id, "\b \b");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (char === "\x03") {
|
|
54
|
+
// Ctrl+C
|
|
55
|
+
this.emit(id, "^C\r\n" + this.prompt);
|
|
56
|
+
buf = "";
|
|
57
|
+
this.lineBuffers.set(id, "");
|
|
58
|
+
}
|
|
59
|
+
else if (char === "\x0c") {
|
|
60
|
+
// Ctrl+L
|
|
61
|
+
this.emit(id, "\x1b[2J\x1b[H" + this.prompt + buf);
|
|
62
|
+
}
|
|
63
|
+
else if (char >= " " || char === "\t") {
|
|
64
|
+
buf += char;
|
|
65
|
+
this.lineBuffers.set(id, buf);
|
|
66
|
+
this.emit(id, char);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async resize(_id, _cols, _rows) { }
|
|
71
|
+
async kill(id) {
|
|
72
|
+
this.listeners.delete(id);
|
|
73
|
+
this.lineBuffers.delete(id);
|
|
74
|
+
}
|
|
75
|
+
onData(id, callback) {
|
|
76
|
+
let set = this.listeners.get(id);
|
|
77
|
+
if (!set) {
|
|
78
|
+
set = new Set();
|
|
79
|
+
this.listeners.set(id, set);
|
|
80
|
+
}
|
|
81
|
+
set.add(callback);
|
|
82
|
+
return () => {
|
|
83
|
+
set?.delete(callback);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async executeCommand(id, rawLine) {
|
|
87
|
+
const parts = rawLine.split(/\s+/);
|
|
88
|
+
const cmd = parts[0];
|
|
89
|
+
const args = parts.slice(1);
|
|
90
|
+
if (cmd === "help") {
|
|
91
|
+
this.emit(id, "Available sandbox commands:\r\n" +
|
|
92
|
+
" help - Show this help message\r\n" +
|
|
93
|
+
" clear - Clear the terminal screen\r\n" +
|
|
94
|
+
" echo [text] - Echo text to stdout\r\n" +
|
|
95
|
+
" ls - List sandbox files\r\n" +
|
|
96
|
+
" cat [file] - Display content of a sandbox file\r\n" +
|
|
97
|
+
" whoami - Print current username\r\n" +
|
|
98
|
+
" date - Display current date and time\r\n" +
|
|
99
|
+
" version - Show Termax engine version\r\n");
|
|
100
|
+
}
|
|
101
|
+
else if (cmd === "clear") {
|
|
102
|
+
this.emit(id, "\x1b[2J\x1b[H");
|
|
103
|
+
}
|
|
104
|
+
else if (cmd === "echo") {
|
|
105
|
+
this.emit(id, args.join(" ") + "\r\n");
|
|
106
|
+
}
|
|
107
|
+
else if (cmd === "ls") {
|
|
108
|
+
const names = Object.keys(this.virtualFiles);
|
|
109
|
+
this.emit(id, names.join(" ") + "\r\n");
|
|
110
|
+
}
|
|
111
|
+
else if (cmd === "cat") {
|
|
112
|
+
const filename = args[0];
|
|
113
|
+
if (!filename) {
|
|
114
|
+
this.emit(id, "usage: cat <filename>\r\n");
|
|
115
|
+
}
|
|
116
|
+
else if (this.virtualFiles[filename] !== undefined) {
|
|
117
|
+
this.emit(id, this.virtualFiles[filename]);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.emit(id, `cat: ${filename}: No such file or directory\r\n`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (cmd === "whoami") {
|
|
124
|
+
this.emit(id, "developer\r\n");
|
|
125
|
+
}
|
|
126
|
+
else if (cmd === "date") {
|
|
127
|
+
this.emit(id, new Date().toISOString() + "\r\n");
|
|
128
|
+
}
|
|
129
|
+
else if (cmd === "version") {
|
|
130
|
+
this.emit(id, "@termaxjs/web-ui v0.1.0 (Web Sandbox Engine)\r\n");
|
|
131
|
+
}
|
|
132
|
+
else if (this.onCommand) {
|
|
133
|
+
try {
|
|
134
|
+
const res = await this.onCommand(cmd, args);
|
|
135
|
+
this.emit(id, res + (res.endsWith("\r\n") ? "" : "\r\n"));
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
this.emit(id, `\x1b[31merror: ${err?.message || String(err)}\x1b[0m\r\n`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.emit(id, `\x1b[31mcommand not found: ${cmd}\x1b[0m\r\n`);
|
|
143
|
+
}
|
|
144
|
+
this.emit(id, this.prompt);
|
|
145
|
+
}
|
|
146
|
+
emit(id, data) {
|
|
147
|
+
const set = this.listeners.get(id);
|
|
148
|
+
if (set) {
|
|
149
|
+
for (const cb of set)
|
|
150
|
+
cb(data);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export class MockPtyAdapter extends InMemoryPtyAdapter {
|
|
155
|
+
constructor(options) {
|
|
156
|
+
super(options);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export class MockFsAdapter {
|
|
160
|
+
files = new Map([
|
|
161
|
+
["/workspace/README.md", "# Welcome to Termax\n\nThis is a mock filesystem running in browser memory.\n"],
|
|
162
|
+
["/workspace/index.ts", "console.log('Hello from Termax');\n"],
|
|
163
|
+
]);
|
|
164
|
+
async readFile(path) {
|
|
165
|
+
if (!this.files.has(path))
|
|
166
|
+
throw new Error(`File not found: ${path}`);
|
|
167
|
+
return this.files.get(path);
|
|
168
|
+
}
|
|
169
|
+
async writeFile(path, content) {
|
|
170
|
+
this.files.set(path, content);
|
|
171
|
+
}
|
|
172
|
+
async readDir(path) {
|
|
173
|
+
const entries = [];
|
|
174
|
+
const prefix = path.endsWith("/") ? path : `${path}/`;
|
|
175
|
+
for (const k of this.files.keys()) {
|
|
176
|
+
if (k.startsWith(prefix)) {
|
|
177
|
+
const rest = k.slice(prefix.length);
|
|
178
|
+
const name = rest.split("/")[0];
|
|
179
|
+
if (name && !entries.some((e) => e.name === name)) {
|
|
180
|
+
entries.push({ name, path: `${prefix}${name}`, isDir: rest.includes("/") });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return entries;
|
|
185
|
+
}
|
|
186
|
+
async stat(path) {
|
|
187
|
+
const content = this.files.get(path);
|
|
188
|
+
return {
|
|
189
|
+
size: content ? content.length : 0,
|
|
190
|
+
modified: Date.now(),
|
|
191
|
+
isDir: !this.files.has(path),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
export class MockGitAdapter {
|
|
196
|
+
async getStatus(_cwd) {
|
|
197
|
+
return "## main...origin/main\n M README.md\n";
|
|
198
|
+
}
|
|
199
|
+
async getLog(_cwd, _limit = 50) {
|
|
200
|
+
return [
|
|
201
|
+
{
|
|
202
|
+
sha: "a1b2c3d4e5f67890",
|
|
203
|
+
parents: [],
|
|
204
|
+
author: "Developer",
|
|
205
|
+
email: "dev@example.com",
|
|
206
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
207
|
+
message: "Initial mock commit",
|
|
208
|
+
},
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
async getDiff(_cwd, _stagedOnly = false) {
|
|
212
|
+
return "diff --git a/README.md b/README.md\n--- a/README.md\n+++ b/README.md\n@@ -1,3 +1,3 @@\n-# Welcome\n+# Welcome to Termax!\n";
|
|
213
|
+
}
|
|
214
|
+
async stage(_cwd, _path) { }
|
|
215
|
+
async unstage(_cwd, _path) { }
|
|
216
|
+
async commit(_cwd, _message) {
|
|
217
|
+
return "f0e1d2c3b4a5";
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
export class MockShellAdapter {
|
|
221
|
+
async runCommand(command, _cwd, _timeoutMs = 10000) {
|
|
222
|
+
return {
|
|
223
|
+
stdout: `Mock execution of: ${command}\n`,
|
|
224
|
+
stderr: "",
|
|
225
|
+
exitCode: 0,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export class MockHostAdapter {
|
|
230
|
+
pty;
|
|
231
|
+
fs;
|
|
232
|
+
git;
|
|
233
|
+
shell;
|
|
234
|
+
capabilities;
|
|
235
|
+
constructor() {
|
|
236
|
+
this.pty = new MockPtyAdapter();
|
|
237
|
+
this.fs = new MockFsAdapter();
|
|
238
|
+
this.git = new MockGitAdapter();
|
|
239
|
+
this.shell = new MockShellAdapter();
|
|
240
|
+
this.capabilities = {
|
|
241
|
+
hasPersistentStorage: false,
|
|
242
|
+
hasNativePty: false,
|
|
243
|
+
hasDirectFsAccess: false,
|
|
244
|
+
hasLspBinaries: false,
|
|
245
|
+
platform: "web",
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mock/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { IPtyAdapter, IPtySpawnOptions, IFsAdapter, FsEntry, FsStat, IGitAdapter, GitLogRecord, IShellAdapter, ShellExecResult, IHostAdapter, HostCapabilities } from "../index.js";
|
|
2
|
+
export declare class JsonRpcWebSocketClient {
|
|
3
|
+
private url;
|
|
4
|
+
private ws;
|
|
5
|
+
private nextId;
|
|
6
|
+
private pending;
|
|
7
|
+
private notificationListeners;
|
|
8
|
+
constructor(url: string);
|
|
9
|
+
connect(): Promise<void>;
|
|
10
|
+
request<T = any>(method: string, params?: any): Promise<T>;
|
|
11
|
+
notify(method: string, params?: any): void;
|
|
12
|
+
on(event: string, callback: (params: any) => void): () => void;
|
|
13
|
+
private handleMessage;
|
|
14
|
+
close(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class RemotePtyAdapter implements IPtyAdapter {
|
|
17
|
+
private rpc;
|
|
18
|
+
constructor(rpc: JsonRpcWebSocketClient);
|
|
19
|
+
spawn(options: IPtySpawnOptions): Promise<number>;
|
|
20
|
+
write(id: number, data: string | Uint8Array): Promise<void>;
|
|
21
|
+
resize(id: number, cols: number, rows: number): Promise<void>;
|
|
22
|
+
kill(id: number): Promise<void>;
|
|
23
|
+
onData(id: number, callback: (data: string | Uint8Array) => void): () => void;
|
|
24
|
+
onExit(id: number, callback: (exitCode: number) => void): () => void;
|
|
25
|
+
}
|
|
26
|
+
export declare class RemoteFsAdapter implements IFsAdapter {
|
|
27
|
+
private rpc;
|
|
28
|
+
constructor(rpc: JsonRpcWebSocketClient);
|
|
29
|
+
readFile(path: string): Promise<string>;
|
|
30
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
31
|
+
readDir(path: string): Promise<FsEntry[]>;
|
|
32
|
+
stat(path: string): Promise<FsStat>;
|
|
33
|
+
}
|
|
34
|
+
export declare class RemoteGitAdapter implements IGitAdapter {
|
|
35
|
+
private rpc;
|
|
36
|
+
constructor(rpc: JsonRpcWebSocketClient);
|
|
37
|
+
getStatus(cwd: string): Promise<string>;
|
|
38
|
+
getLog(cwd: string, limit?: number): Promise<GitLogRecord[]>;
|
|
39
|
+
getDiff(cwd: string, stagedOnly?: boolean): Promise<string>;
|
|
40
|
+
stage(cwd: string, path: string): Promise<void>;
|
|
41
|
+
unstage(cwd: string, path: string): Promise<void>;
|
|
42
|
+
commit(cwd: string, message: string): Promise<string>;
|
|
43
|
+
}
|
|
44
|
+
export declare class RemoteShellAdapter implements IShellAdapter {
|
|
45
|
+
private rpc;
|
|
46
|
+
constructor(rpc: JsonRpcWebSocketClient);
|
|
47
|
+
runCommand(command: string, cwd?: string, timeoutMs?: number): Promise<ShellExecResult>;
|
|
48
|
+
}
|
|
49
|
+
export declare class RemoteHostAdapter implements IHostAdapter {
|
|
50
|
+
readonly pty: RemotePtyAdapter;
|
|
51
|
+
readonly fs: RemoteFsAdapter;
|
|
52
|
+
readonly git: RemoteGitAdapter;
|
|
53
|
+
readonly shell: RemoteShellAdapter;
|
|
54
|
+
readonly capabilities: HostCapabilities;
|
|
55
|
+
readonly rpc: JsonRpcWebSocketClient;
|
|
56
|
+
constructor(serverUrl: string);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/remote/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
export class JsonRpcWebSocketClient {
|
|
2
|
+
url;
|
|
3
|
+
ws = null;
|
|
4
|
+
nextId = 1;
|
|
5
|
+
pending = new Map();
|
|
6
|
+
notificationListeners = new Map();
|
|
7
|
+
constructor(url) {
|
|
8
|
+
this.url = url;
|
|
9
|
+
}
|
|
10
|
+
async connect() {
|
|
11
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN)
|
|
12
|
+
return;
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
try {
|
|
15
|
+
this.ws = new WebSocket(this.url);
|
|
16
|
+
this.ws.onopen = () => resolve();
|
|
17
|
+
this.ws.onerror = (err) => reject(err);
|
|
18
|
+
this.ws.onmessage = (event) => this.handleMessage(event.data);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
reject(err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async request(method, params) {
|
|
26
|
+
await this.connect();
|
|
27
|
+
const id = this.nextId++;
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
this.pending.set(id, { resolve, reject });
|
|
30
|
+
const payload = JSON.stringify({ jsonrpc: "2.0", id, method, params });
|
|
31
|
+
this.ws?.send(payload);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
notify(method, params) {
|
|
35
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
36
|
+
this.ws.send(JSON.stringify({ jsonrpc: "2.0", method, params }));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
on(event, callback) {
|
|
40
|
+
let set = this.notificationListeners.get(event);
|
|
41
|
+
if (!set) {
|
|
42
|
+
set = new Set();
|
|
43
|
+
this.notificationListeners.set(event, set);
|
|
44
|
+
}
|
|
45
|
+
set.add(callback);
|
|
46
|
+
return () => {
|
|
47
|
+
set?.delete(callback);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
handleMessage(raw) {
|
|
51
|
+
try {
|
|
52
|
+
const msg = typeof raw === "string" ? JSON.parse(raw) : JSON.parse(new TextDecoder().decode(raw));
|
|
53
|
+
if (msg.id && this.pending.has(msg.id)) {
|
|
54
|
+
const handler = this.pending.get(msg.id);
|
|
55
|
+
this.pending.delete(msg.id);
|
|
56
|
+
if (msg.error)
|
|
57
|
+
handler.reject(new Error(msg.error.message || "RPC Error"));
|
|
58
|
+
else
|
|
59
|
+
handler.resolve(msg.result);
|
|
60
|
+
}
|
|
61
|
+
else if (msg.method && this.notificationListeners.has(msg.method)) {
|
|
62
|
+
const listeners = this.notificationListeners.get(msg.method);
|
|
63
|
+
for (const cb of listeners)
|
|
64
|
+
cb(msg.params);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
console.error("[RemoteAdapter] Invalid JSON-RPC message", e);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
close() {
|
|
72
|
+
this.ws?.close();
|
|
73
|
+
this.ws = null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export class RemotePtyAdapter {
|
|
77
|
+
rpc;
|
|
78
|
+
constructor(rpc) {
|
|
79
|
+
this.rpc = rpc;
|
|
80
|
+
}
|
|
81
|
+
async spawn(options) {
|
|
82
|
+
const res = await this.rpc.request("pty.spawn", options);
|
|
83
|
+
return res.id;
|
|
84
|
+
}
|
|
85
|
+
async write(id, data) {
|
|
86
|
+
const text = typeof data === "string" ? data : new TextDecoder().decode(data);
|
|
87
|
+
this.rpc.notify("pty.write", { id, data: text });
|
|
88
|
+
}
|
|
89
|
+
async resize(id, cols, rows) {
|
|
90
|
+
this.rpc.notify("pty.resize", { id, cols, rows });
|
|
91
|
+
}
|
|
92
|
+
async kill(id) {
|
|
93
|
+
await this.rpc.request("pty.kill", { id });
|
|
94
|
+
}
|
|
95
|
+
onData(id, callback) {
|
|
96
|
+
return this.rpc.on("pty.data", (params) => {
|
|
97
|
+
if (params.id === id)
|
|
98
|
+
callback(params.data);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
onExit(id, callback) {
|
|
102
|
+
return this.rpc.on("pty.exit", (params) => {
|
|
103
|
+
if (params.id === id)
|
|
104
|
+
callback(params.exitCode);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export class RemoteFsAdapter {
|
|
109
|
+
rpc;
|
|
110
|
+
constructor(rpc) {
|
|
111
|
+
this.rpc = rpc;
|
|
112
|
+
}
|
|
113
|
+
async readFile(path) {
|
|
114
|
+
return this.rpc.request("fs.readFile", { path });
|
|
115
|
+
}
|
|
116
|
+
async writeFile(path, content) {
|
|
117
|
+
return this.rpc.request("fs.writeFile", { path, content });
|
|
118
|
+
}
|
|
119
|
+
async readDir(path) {
|
|
120
|
+
return this.rpc.request("fs.readDir", { path });
|
|
121
|
+
}
|
|
122
|
+
async stat(path) {
|
|
123
|
+
return this.rpc.request("fs.stat", { path });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export class RemoteGitAdapter {
|
|
127
|
+
rpc;
|
|
128
|
+
constructor(rpc) {
|
|
129
|
+
this.rpc = rpc;
|
|
130
|
+
}
|
|
131
|
+
async getStatus(cwd) {
|
|
132
|
+
return this.rpc.request("git.status", { cwd });
|
|
133
|
+
}
|
|
134
|
+
async getLog(cwd, limit = 50) {
|
|
135
|
+
return this.rpc.request("git.log", { cwd, limit });
|
|
136
|
+
}
|
|
137
|
+
async getDiff(cwd, stagedOnly = false) {
|
|
138
|
+
return this.rpc.request("git.diff", { cwd, stagedOnly });
|
|
139
|
+
}
|
|
140
|
+
async stage(cwd, path) {
|
|
141
|
+
return this.rpc.request("git.stage", { cwd, path });
|
|
142
|
+
}
|
|
143
|
+
async unstage(cwd, path) {
|
|
144
|
+
return this.rpc.request("git.unstage", { cwd, path });
|
|
145
|
+
}
|
|
146
|
+
async commit(cwd, message) {
|
|
147
|
+
return this.rpc.request("git.commit", { cwd, message });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
export class RemoteShellAdapter {
|
|
151
|
+
rpc;
|
|
152
|
+
constructor(rpc) {
|
|
153
|
+
this.rpc = rpc;
|
|
154
|
+
}
|
|
155
|
+
async runCommand(command, cwd, timeoutMs = 10000) {
|
|
156
|
+
return this.rpc.request("shell.runCommand", { command, cwd, timeoutMs });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export class RemoteHostAdapter {
|
|
160
|
+
pty;
|
|
161
|
+
fs;
|
|
162
|
+
git;
|
|
163
|
+
shell;
|
|
164
|
+
capabilities;
|
|
165
|
+
rpc;
|
|
166
|
+
constructor(serverUrl) {
|
|
167
|
+
this.rpc = new JsonRpcWebSocketClient(serverUrl);
|
|
168
|
+
this.pty = new RemotePtyAdapter(this.rpc);
|
|
169
|
+
this.fs = new RemoteFsAdapter(this.rpc);
|
|
170
|
+
this.git = new RemoteGitAdapter(this.rpc);
|
|
171
|
+
this.shell = new RemoteShellAdapter(this.rpc);
|
|
172
|
+
this.capabilities = {
|
|
173
|
+
hasPersistentStorage: true,
|
|
174
|
+
hasNativePty: true,
|
|
175
|
+
hasDirectFsAccess: true,
|
|
176
|
+
hasLspBinaries: true,
|
|
177
|
+
platform: "linux",
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/remote/index.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,sBAAsB;IAMb;IALZ,EAAE,GAAqB,IAAI,CAAC;IAC5B,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,qBAAqB,GAAG,IAAI,GAAG,EAAsC,CAAC;IAE9E,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAE5B,KAAK,CAAC,OAAO;QAClB,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAO;QAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO,CAAU,MAAc,EAAE,MAAY;QACxD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,MAAc,EAAE,MAAY;QACxC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAEM,EAAE,CAAC,KAAa,EAAE,QAA+B;QACtD,IAAI,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,GAAG,EAAE;YACV,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,GAAQ;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClG,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,GAAG,CAAC,KAAK;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;;oBACtE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpE,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;gBAC9D,KAAK,MAAM,EAAE,IAAI,SAAS;oBAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,GAA2B;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAG,CAAC;IAE5C,KAAK,CAAC,KAAK,CAAC,OAAyB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAiB,WAAW,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,IAAyB;QACtD,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,IAAY;QACxD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,EAAU;QAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,EAAU,EAAE,QAA6C;QACrE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,MAAoC,EAAE,EAAE;YACtE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;gBAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,EAAU,EAAE,QAAoC;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,MAAwC,EAAE,EAAE;YAC1E,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;gBAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,GAA2B;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAG,CAAC;IAE5C,KAAK,CAAC,QAAQ,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAS,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAe;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAO,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAY,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAS,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,GAA2B;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAG,CAAC;IAE5C,KAAK,CAAC,SAAS,CAAC,GAAW;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAS,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAK,GAAG,EAAE;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAiB,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAS,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,IAAY;QAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAO,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAY;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAO,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,OAAe;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAS,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IACT;IAApB,YAAoB,GAA2B;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAG,CAAC;IAE5C,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,GAAY,EAAE,SAAS,GAAG,KAAK;QACtE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAkB,kBAAkB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5F,CAAC;CACF;AAED,MAAM,OAAO,iBAAiB;IACZ,GAAG,CAAmB;IACtB,EAAE,CAAkB;IACpB,GAAG,CAAmB;IACtB,KAAK,CAAqB;IAC1B,YAAY,CAAmB;IAC/B,GAAG,CAAyB;IAE5C,YAAY,SAAiB;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,YAAY,GAAG;YAClB,oBAAoB,EAAE,IAAI;YAC1B,YAAY,EAAE,IAAI;YAClB,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,OAAO;SAClB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { IPtyAdapter, IPtySpawnOptions, IFsAdapter, FsEntry, FsStat, IGitAdapter, GitLogRecord, IShellAdapter, ShellExecResult, IKeychainAdapter, IHostAdapter, HostCapabilities } from "../index.js";
|
|
2
|
+
type TauriInvoke = (cmd: string, args?: Record<string, unknown>) => Promise<any>;
|
|
3
|
+
export declare class TauriPtyAdapter implements IPtyAdapter {
|
|
4
|
+
private invoke;
|
|
5
|
+
constructor(customInvoke?: TauriInvoke);
|
|
6
|
+
spawn(options: IPtySpawnOptions): Promise<number>;
|
|
7
|
+
write(id: number, data: string | Uint8Array): Promise<void>;
|
|
8
|
+
resize(id: number, cols: number, rows: number): Promise<void>;
|
|
9
|
+
kill(id: number): Promise<void>;
|
|
10
|
+
onData(id: number, callback: (data: string | Uint8Array) => void): () => void;
|
|
11
|
+
onExit(id: number, callback: (exitCode: number) => void): () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare class TauriFsAdapter implements IFsAdapter {
|
|
14
|
+
private invoke;
|
|
15
|
+
constructor(customInvoke?: TauriInvoke);
|
|
16
|
+
readFile(path: string): Promise<string>;
|
|
17
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
18
|
+
readDir(path: string): Promise<FsEntry[]>;
|
|
19
|
+
stat(path: string): Promise<FsStat>;
|
|
20
|
+
}
|
|
21
|
+
export declare class TauriGitAdapter implements IGitAdapter {
|
|
22
|
+
private invoke;
|
|
23
|
+
constructor(customInvoke?: TauriInvoke);
|
|
24
|
+
getStatus(cwd: string): Promise<string>;
|
|
25
|
+
getLog(cwd: string, limit?: number): Promise<GitLogRecord[]>;
|
|
26
|
+
getDiff(cwd: string, stagedOnly?: boolean): Promise<string>;
|
|
27
|
+
stage(cwd: string, path: string): Promise<void>;
|
|
28
|
+
unstage(cwd: string, path: string): Promise<void>;
|
|
29
|
+
commit(cwd: string, message: string): Promise<string>;
|
|
30
|
+
}
|
|
31
|
+
export declare class TauriShellAdapter implements IShellAdapter {
|
|
32
|
+
private invoke;
|
|
33
|
+
constructor(customInvoke?: TauriInvoke);
|
|
34
|
+
runCommand(command: string, cwd?: string, timeoutMs?: number): Promise<ShellExecResult>;
|
|
35
|
+
}
|
|
36
|
+
export declare class TauriKeychainAdapter implements IKeychainAdapter {
|
|
37
|
+
private invoke;
|
|
38
|
+
constructor(customInvoke?: TauriInvoke);
|
|
39
|
+
getSecret(key: string): Promise<string | null>;
|
|
40
|
+
setSecret(key: string, value: string): Promise<void>;
|
|
41
|
+
deleteSecret(key: string): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export declare class TauriHostAdapter implements IHostAdapter {
|
|
44
|
+
readonly pty: TauriPtyAdapter;
|
|
45
|
+
readonly fs: TauriFsAdapter;
|
|
46
|
+
readonly git: TauriGitAdapter;
|
|
47
|
+
readonly shell: TauriShellAdapter;
|
|
48
|
+
readonly keychain: TauriKeychainAdapter;
|
|
49
|
+
readonly capabilities: HostCapabilities;
|
|
50
|
+
constructor(customInvoke?: TauriInvoke);
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tauri/index.ts"],"names":[],"mappings":"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"}
|