@linkshell/host 0.1.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 (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/host/src/drivers/acp/connection.d.ts +61 -0
  4. package/dist/host/src/drivers/acp/connection.js +121 -0
  5. package/dist/host/src/drivers/acp/connection.js.map +1 -0
  6. package/dist/host/src/drivers/acp/driver.d.ts +110 -0
  7. package/dist/host/src/drivers/acp/driver.js +438 -0
  8. package/dist/host/src/drivers/acp/driver.js.map +1 -0
  9. package/dist/host/src/drivers/acp/mapper.d.ts +49 -0
  10. package/dist/host/src/drivers/acp/mapper.js +411 -0
  11. package/dist/host/src/drivers/acp/mapper.js.map +1 -0
  12. package/dist/host/src/drivers/auth.d.ts +7 -0
  13. package/dist/host/src/drivers/auth.js +57 -0
  14. package/dist/host/src/drivers/auth.js.map +1 -0
  15. package/dist/host/src/drivers/claude/driver.d.ts +76 -0
  16. package/dist/host/src/drivers/claude/driver.js +331 -0
  17. package/dist/host/src/drivers/claude/driver.js.map +1 -0
  18. package/dist/host/src/drivers/claude/transcript.d.ts +335 -0
  19. package/dist/host/src/drivers/claude/transcript.js +516 -0
  20. package/dist/host/src/drivers/claude/transcript.js.map +1 -0
  21. package/dist/host/src/drivers/codex/app-server.d.ts +36 -0
  22. package/dist/host/src/drivers/codex/app-server.js +144 -0
  23. package/dist/host/src/drivers/codex/app-server.js.map +1 -0
  24. package/dist/host/src/drivers/codex/driver.d.ts +89 -0
  25. package/dist/host/src/drivers/codex/driver.js +452 -0
  26. package/dist/host/src/drivers/codex/driver.js.map +1 -0
  27. package/dist/host/src/drivers/codex/mapper.d.ts +61 -0
  28. package/dist/host/src/drivers/codex/mapper.js +623 -0
  29. package/dist/host/src/drivers/codex/mapper.js.map +1 -0
  30. package/dist/host/src/drivers/codex/settings.d.ts +51 -0
  31. package/dist/host/src/drivers/codex/settings.js +107 -0
  32. package/dist/host/src/drivers/codex/settings.js.map +1 -0
  33. package/dist/host/src/drivers/images.d.ts +11 -0
  34. package/dist/host/src/drivers/images.js +34 -0
  35. package/dist/host/src/drivers/images.js.map +1 -0
  36. package/dist/host/src/drivers/nesting.d.ts +6 -0
  37. package/dist/host/src/drivers/nesting.js +25 -0
  38. package/dist/host/src/drivers/nesting.js.map +1 -0
  39. package/dist/host/src/drivers/registry.d.ts +21 -0
  40. package/dist/host/src/drivers/registry.js +30 -0
  41. package/dist/host/src/drivers/registry.js.map +1 -0
  42. package/dist/host/src/drivers/types.d.ts +105 -0
  43. package/dist/host/src/drivers/types.js +2 -0
  44. package/dist/host/src/drivers/types.js.map +1 -0
  45. package/dist/host/src/fs.d.ts +69 -0
  46. package/dist/host/src/fs.js +198 -0
  47. package/dist/host/src/fs.js.map +1 -0
  48. package/dist/host/src/gateway.d.ts +55 -0
  49. package/dist/host/src/gateway.js +263 -0
  50. package/dist/host/src/gateway.js.map +1 -0
  51. package/dist/host/src/host.d.ts +51 -0
  52. package/dist/host/src/host.js +133 -0
  53. package/dist/host/src/host.js.map +1 -0
  54. package/dist/host/src/hub.d.ts +89 -0
  55. package/dist/host/src/hub.js +592 -0
  56. package/dist/host/src/hub.js.map +1 -0
  57. package/dist/host/src/index.d.ts +10 -0
  58. package/dist/host/src/index.js +10 -0
  59. package/dist/host/src/index.js.map +1 -0
  60. package/dist/host/src/ports.d.ts +24 -0
  61. package/dist/host/src/ports.js +201 -0
  62. package/dist/host/src/ports.js.map +1 -0
  63. package/dist/host/src/rpc/client.d.ts +9 -0
  64. package/dist/host/src/rpc/client.js +42 -0
  65. package/dist/host/src/rpc/client.js.map +1 -0
  66. package/dist/host/src/rpc/server.d.ts +52 -0
  67. package/dist/host/src/rpc/server.js +293 -0
  68. package/dist/host/src/rpc/server.js.map +1 -0
  69. package/dist/host/src/screen.d.ts +30 -0
  70. package/dist/host/src/screen.js +230 -0
  71. package/dist/host/src/screen.js.map +1 -0
  72. package/dist/host/src/shell-env.d.ts +8 -0
  73. package/dist/host/src/shell-env.js +39 -0
  74. package/dist/host/src/shell-env.js.map +1 -0
  75. package/dist/host/src/store.d.ts +75 -0
  76. package/dist/host/src/store.js +265 -0
  77. package/dist/host/src/store.js.map +1 -0
  78. package/dist/host/src/terminals.d.ts +55 -0
  79. package/dist/host/src/terminals.js +367 -0
  80. package/dist/host/src/terminals.js.map +1 -0
  81. package/dist/host/tsconfig.tsbuildinfo +1 -0
  82. package/dist/wire/src/crypto.d.ts +65 -0
  83. package/dist/wire/src/crypto.js +253 -0
  84. package/dist/wire/src/crypto.js.map +1 -0
  85. package/dist/wire/src/index.d.ts +8 -0
  86. package/dist/wire/src/index.js +9 -0
  87. package/dist/wire/src/index.js.map +1 -0
  88. package/dist/wire/src/model.d.ts +704 -0
  89. package/dist/wire/src/model.js +163 -0
  90. package/dist/wire/src/model.js.map +1 -0
  91. package/dist/wire/src/peer.d.ts +42 -0
  92. package/dist/wire/src/peer.js +143 -0
  93. package/dist/wire/src/peer.js.map +1 -0
  94. package/dist/wire/src/relay-client.d.ts +82 -0
  95. package/dist/wire/src/relay-client.js +259 -0
  96. package/dist/wire/src/relay-client.js.map +1 -0
  97. package/dist/wire/src/relay.d.ts +481 -0
  98. package/dist/wire/src/relay.js +129 -0
  99. package/dist/wire/src/relay.js.map +1 -0
  100. package/dist/wire/src/rpc.d.ts +4170 -0
  101. package/dist/wire/src/rpc.js +332 -0
  102. package/dist/wire/src/rpc.js.map +1 -0
  103. package/dist/wire/src/shell.d.ts +2 -0
  104. package/dist/wire/src/shell.js +62 -0
  105. package/dist/wire/src/shell.js.map +1 -0
  106. package/dist/wire/src/updates.d.ts +3325 -0
  107. package/dist/wire/src/updates.js +210 -0
  108. package/dist/wire/src/updates.js.map +1 -0
  109. package/package.json +53 -0
@@ -0,0 +1,259 @@
1
+ import { gatewayChallengeMessage, publicIdentity, sign } from "./crypto.js";
2
+ import { serverFrameSchema, tunnelFrameSchema, } from "./relay.js";
3
+ export class RelayRequestError extends Error {
4
+ code;
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.code = code;
8
+ }
9
+ }
10
+ const OPEN = 1;
11
+ export class RelayClient {
12
+ options;
13
+ socket;
14
+ statusValue = "offline";
15
+ attempt = 0;
16
+ timer;
17
+ nextId = 1;
18
+ pending = new Map();
19
+ statusListeners = new Set();
20
+ frameListeners = new Set();
21
+ undeliverableListeners = new Set();
22
+ eventListeners = new Map();
23
+ waiters = new Set();
24
+ /** Account the gateway recognised on the last connection. */
25
+ account;
26
+ lastError;
27
+ constructor(options) {
28
+ this.options = options;
29
+ }
30
+ get status() {
31
+ return this.statusValue;
32
+ }
33
+ get identity() {
34
+ return publicIdentity(this.options.identity);
35
+ }
36
+ onStatus(listener) {
37
+ this.statusListeners.add(listener);
38
+ return () => this.statusListeners.delete(listener);
39
+ }
40
+ onFrame(listener) {
41
+ this.frameListeners.add(listener);
42
+ return () => this.frameListeners.delete(listener);
43
+ }
44
+ onUndeliverable(listener) {
45
+ this.undeliverableListeners.add(listener);
46
+ return () => this.undeliverableListeners.delete(listener);
47
+ }
48
+ on(name, listener) {
49
+ let set = this.eventListeners.get(name);
50
+ if (!set)
51
+ this.eventListeners.set(name, (set = new Set()));
52
+ const entry = listener;
53
+ set.add(entry);
54
+ return () => set.delete(entry);
55
+ }
56
+ start() {
57
+ if (this.statusValue === "connecting" || this.statusValue === "online")
58
+ return;
59
+ this.open();
60
+ }
61
+ stop() {
62
+ this.setStatus("stopped");
63
+ clearTimeout(this.timer);
64
+ this.socket?.close(1000, "stopped");
65
+ this.socket = undefined;
66
+ this.failPending("stopped");
67
+ for (const wake of this.waiters)
68
+ wake();
69
+ }
70
+ /** Reconnect now instead of waiting out the backoff (app foregrounded, network back). */
71
+ reconnectNow() {
72
+ if (this.statusValue === "stopped" || this.statusValue === "online" || this.statusValue === "connecting")
73
+ return;
74
+ clearTimeout(this.timer);
75
+ this.attempt = 0;
76
+ this.open();
77
+ }
78
+ /** Waits (up to `timeoutMs`) for the gateway connection. */
79
+ waitOnline(timeoutMs) {
80
+ if (this.statusValue === "online")
81
+ return Promise.resolve(true);
82
+ if (this.statusValue === "stopped")
83
+ return Promise.resolve(false);
84
+ return new Promise((resolve) => {
85
+ const done = () => {
86
+ clearTimeout(timer);
87
+ this.waiters.delete(done);
88
+ resolve(this.statusValue === "online");
89
+ };
90
+ const timer = setTimeout(done, timeoutMs);
91
+ this.waiters.add(done);
92
+ });
93
+ }
94
+ async request(method, params, timeoutMs) {
95
+ const limit = timeoutMs ?? this.options.requestTimeoutMs ?? 20_000;
96
+ if (!(await this.waitOnline(limit)))
97
+ throw new RelayRequestError("offline", "not connected to the gateway");
98
+ const id = this.nextId++;
99
+ return new Promise((resolve, reject) => {
100
+ const timer = setTimeout(() => {
101
+ this.pending.delete(id);
102
+ reject(new RelayRequestError("timeout", `${method} timed out`));
103
+ }, limit);
104
+ this.pending.set(id, { resolve: resolve, reject, timer });
105
+ this.sendFrame({ t: "req", id, method, params });
106
+ });
107
+ }
108
+ /** Sends a tunnel frame to a peer. Returns false when not connected. */
109
+ send(to, frame) {
110
+ if (this.statusValue !== "online")
111
+ return false;
112
+ return this.sendFrame({ t: "to", to, d: JSON.stringify(frame) });
113
+ }
114
+ // ── internals ─────────────────────────────────────────────────────
115
+ sendFrame(frame) {
116
+ if (!this.socket || this.socket.readyState !== OPEN)
117
+ return false;
118
+ this.socket.send(JSON.stringify(frame));
119
+ return true;
120
+ }
121
+ setStatus(status, error) {
122
+ if (error)
123
+ this.lastError = error;
124
+ if (status === "online")
125
+ this.lastError = undefined;
126
+ if (this.statusValue === status && !error)
127
+ return;
128
+ this.statusValue = status;
129
+ for (const listener of this.statusListeners)
130
+ listener(status, error);
131
+ if (status === "online" || status === "stopped")
132
+ for (const wake of this.waiters)
133
+ wake();
134
+ }
135
+ failPending(reason) {
136
+ for (const [id, entry] of this.pending) {
137
+ clearTimeout(entry.timer);
138
+ entry.reject(new RelayRequestError("offline", reason));
139
+ this.pending.delete(id);
140
+ }
141
+ }
142
+ open() {
143
+ this.setStatus("connecting");
144
+ let socket;
145
+ try {
146
+ socket = this.options.createSocket(this.options.url);
147
+ }
148
+ catch (error) {
149
+ this.scheduleReconnect({ code: "connect_failed", message: error instanceof Error ? error.message : String(error) });
150
+ return;
151
+ }
152
+ this.socket = socket;
153
+ let fatal;
154
+ socket.onmessage = (event) => {
155
+ let frame;
156
+ try {
157
+ const parsed = serverFrameSchema.safeParse(JSON.parse(String(event.data)));
158
+ if (!parsed.success)
159
+ return;
160
+ frame = parsed.data;
161
+ }
162
+ catch {
163
+ return;
164
+ }
165
+ switch (frame.t) {
166
+ case "challenge":
167
+ void this.authenticate(frame.nonce);
168
+ return;
169
+ case "ready":
170
+ this.attempt = 0;
171
+ this.account = frame.userId ? { userId: frame.userId, email: frame.email } : undefined;
172
+ this.setStatus("online");
173
+ return;
174
+ case "res": {
175
+ const entry = this.pending.get(frame.id);
176
+ if (!entry)
177
+ return;
178
+ clearTimeout(entry.timer);
179
+ this.pending.delete(frame.id);
180
+ if (frame.error)
181
+ entry.reject(new RelayRequestError(frame.error.code, frame.error.message));
182
+ else
183
+ entry.resolve(frame.result);
184
+ return;
185
+ }
186
+ case "event":
187
+ for (const listener of this.eventListeners.get(frame.name) ?? [])
188
+ listener(frame.data);
189
+ return;
190
+ case "from": {
191
+ let inner;
192
+ try {
193
+ const parsed = tunnelFrameSchema.safeParse(JSON.parse(frame.d));
194
+ if (!parsed.success)
195
+ return;
196
+ inner = parsed.data;
197
+ }
198
+ catch {
199
+ return;
200
+ }
201
+ for (const listener of this.frameListeners)
202
+ listener(frame.from, frame.via, inner);
203
+ return;
204
+ }
205
+ case "undeliverable":
206
+ for (const listener of this.undeliverableListeners)
207
+ listener(frame.to, frame.reason);
208
+ return;
209
+ case "error":
210
+ fatal = { code: frame.code, message: frame.message };
211
+ return;
212
+ case "pong":
213
+ return;
214
+ }
215
+ };
216
+ socket.onerror = () => { };
217
+ socket.onclose = (event) => {
218
+ if (this.socket !== socket)
219
+ return;
220
+ this.socket = undefined;
221
+ this.failPending("connection closed");
222
+ if (this.statusValue === "stopped")
223
+ return;
224
+ // Another connection with our identity took over: don't fight it.
225
+ if (event.code === 4000) {
226
+ this.setStatus("offline", { code: "replaced", message: "connected elsewhere with this identity" });
227
+ return;
228
+ }
229
+ this.scheduleReconnect(fatal ?? { code: "disconnected", message: event.reason || "connection lost" });
230
+ };
231
+ }
232
+ async authenticate(nonce) {
233
+ let token;
234
+ try {
235
+ token = (await this.options.token?.()) ?? undefined;
236
+ }
237
+ catch {
238
+ token = undefined;
239
+ }
240
+ this.sendFrame({
241
+ t: "auth",
242
+ role: this.options.role,
243
+ identity: publicIdentity(this.options.identity),
244
+ signature: sign(this.options.identity, gatewayChallengeMessage(nonce)),
245
+ name: this.options.name.slice(0, 120),
246
+ platform: this.options.platform,
247
+ token,
248
+ });
249
+ }
250
+ scheduleReconnect(error) {
251
+ this.setStatus("offline", error);
252
+ const min = this.options.minBackoffMs ?? 500;
253
+ const max = this.options.maxBackoffMs ?? 30_000;
254
+ const delay = Math.min(max, min * 2 ** this.attempt) * (0.75 + Math.random() * 0.5);
255
+ this.attempt += 1;
256
+ this.timer = setTimeout(() => this.open(), delay);
257
+ }
258
+ }
259
+ //# sourceMappingURL=relay-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../../../wire/src/relay-client.ts"],"names":[],"mappings":"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"}