ds-harness-remote 0.5.7 → 0.5.10

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 (234) hide show
  1. package/dist/acp/adapter.d.ts +1 -1
  2. package/dist/acp/adapter.d.ts.map +1 -1
  3. package/dist/acp/adapters/antigravity/transcript-loader.d.ts.map +1 -1
  4. package/dist/acp/adapters/antigravity/transcript-loader.js +4 -1
  5. package/dist/acp/adapters/antigravity/transcript-loader.js.map +1 -1
  6. package/dist/acp/adapters/claude-history.d.ts +3 -0
  7. package/dist/acp/adapters/claude-history.d.ts.map +1 -0
  8. package/dist/acp/adapters/claude-history.js +118 -0
  9. package/dist/acp/adapters/claude-history.js.map +1 -0
  10. package/dist/acp/adapters/claude-process.d.ts +21 -0
  11. package/dist/acp/adapters/claude-process.d.ts.map +1 -0
  12. package/dist/acp/adapters/claude-process.js +147 -0
  13. package/dist/acp/adapters/claude-process.js.map +1 -0
  14. package/dist/acp/adapters/cursor-process.d.ts +9 -4
  15. package/dist/acp/adapters/cursor-process.d.ts.map +1 -1
  16. package/dist/acp/adapters/cursor-process.js +31 -3
  17. package/dist/acp/adapters/cursor-process.js.map +1 -1
  18. package/dist/acp/adapters/opencode-process.d.ts +67 -0
  19. package/dist/acp/adapters/opencode-process.d.ts.map +1 -0
  20. package/dist/acp/adapters/opencode-process.js +272 -0
  21. package/dist/acp/adapters/opencode-process.js.map +1 -0
  22. package/dist/acp/adapters/opencode.d.ts +8 -0
  23. package/dist/acp/adapters/opencode.d.ts.map +1 -0
  24. package/dist/acp/adapters/opencode.js +8 -0
  25. package/dist/acp/adapters/opencode.js.map +1 -0
  26. package/dist/acp/adapters/pi-process.d.ts +42 -0
  27. package/dist/acp/adapters/pi-process.d.ts.map +1 -0
  28. package/dist/acp/adapters/pi-process.js +410 -0
  29. package/dist/acp/adapters/pi-process.js.map +1 -0
  30. package/dist/acp/gateway.d.ts +10 -0
  31. package/dist/acp/gateway.d.ts.map +1 -1
  32. package/dist/acp/gateway.js +344 -103
  33. package/dist/acp/gateway.js.map +1 -1
  34. package/dist/acp/method-policy.d.ts +19 -19
  35. package/dist/acp/method-policy.js +5 -5
  36. package/dist/acp/method-policy.js.map +1 -1
  37. package/dist/acp/pi-tool-result.d.ts +9 -0
  38. package/dist/acp/pi-tool-result.d.ts.map +1 -0
  39. package/dist/acp/pi-tool-result.js +22 -0
  40. package/dist/acp/pi-tool-result.js.map +1 -0
  41. package/dist/acp/virtual-catalog.d.ts +50 -0
  42. package/dist/acp/virtual-catalog.d.ts.map +1 -0
  43. package/dist/acp/virtual-catalog.js +103 -0
  44. package/dist/acp/virtual-catalog.js.map +1 -0
  45. package/dist/acp/virtual-contract.d.ts +165 -0
  46. package/dist/acp/virtual-contract.d.ts.map +1 -0
  47. package/dist/acp/virtual-contract.js +216 -0
  48. package/dist/acp/virtual-contract.js.map +1 -0
  49. package/dist/acp/virtual-event-carrier.d.ts +50 -0
  50. package/dist/acp/virtual-event-carrier.d.ts.map +1 -0
  51. package/dist/acp/virtual-event-carrier.js +222 -0
  52. package/dist/acp/virtual-event-carrier.js.map +1 -0
  53. package/dist/acp/virtual-harness.d.ts +13 -112
  54. package/dist/acp/virtual-harness.d.ts.map +1 -1
  55. package/dist/acp/virtual-harness.js +129 -911
  56. package/dist/acp/virtual-harness.js.map +1 -1
  57. package/dist/acp/virtual-live.d.ts +78 -0
  58. package/dist/acp/virtual-live.d.ts.map +1 -0
  59. package/dist/acp/virtual-live.js +513 -0
  60. package/dist/acp/virtual-live.js.map +1 -0
  61. package/dist/acp/workspace-tools.js +2 -2
  62. package/dist/acp/workspace-tools.js.map +1 -1
  63. package/dist/acp.d.ts.map +1 -1
  64. package/dist/acp.js +1 -0
  65. package/dist/acp.js.map +1 -1
  66. package/dist/client/header.d.ts +10 -0
  67. package/dist/client/header.d.ts.map +1 -0
  68. package/dist/client/header.js +169 -0
  69. package/dist/client/header.js.map +1 -0
  70. package/dist/client/icons.d.ts +3 -0
  71. package/dist/client/icons.d.ts.map +1 -0
  72. package/dist/client/icons.js +3 -0
  73. package/dist/client/icons.js.map +1 -0
  74. package/dist/client/navigation.d.ts +5 -0
  75. package/dist/client/navigation.d.ts.map +1 -0
  76. package/dist/client/navigation.js +30 -0
  77. package/dist/client/navigation.js.map +1 -0
  78. package/dist/client/presentation.d.ts +17 -0
  79. package/dist/client/presentation.d.ts.map +1 -0
  80. package/dist/client/presentation.js +208 -0
  81. package/dist/client/presentation.js.map +1 -0
  82. package/dist/client/progress.d.ts +10 -0
  83. package/dist/client/progress.d.ts.map +1 -0
  84. package/dist/client/progress.js +82 -0
  85. package/dist/client/progress.js.map +1 -0
  86. package/dist/client/settings.d.ts +10 -0
  87. package/dist/client/settings.d.ts.map +1 -0
  88. package/dist/client/settings.js +335 -0
  89. package/dist/client/settings.js.map +1 -0
  90. package/dist/client/shell.d.ts +6 -0
  91. package/dist/client/shell.d.ts.map +1 -0
  92. package/dist/client/shell.js +128 -0
  93. package/dist/client/shell.js.map +1 -0
  94. package/dist/client/types.d.ts +264 -0
  95. package/dist/client/types.d.ts.map +1 -0
  96. package/dist/client/types.js +2 -0
  97. package/dist/client/types.js.map +1 -0
  98. package/dist/client/workspaces.d.ts +11 -0
  99. package/dist/client/workspaces.d.ts.map +1 -0
  100. package/dist/client/workspaces.js +1179 -0
  101. package/dist/client/workspaces.js.map +1 -0
  102. package/dist/client-capabilities.d.ts +6 -0
  103. package/dist/client-capabilities.d.ts.map +1 -0
  104. package/dist/client-capabilities.js +88 -0
  105. package/dist/client-capabilities.js.map +1 -0
  106. package/dist/client-codex-streams.d.ts +23 -0
  107. package/dist/client-codex-streams.d.ts.map +1 -0
  108. package/dist/client-codex-streams.js +156 -0
  109. package/dist/client-codex-streams.js.map +1 -0
  110. package/dist/client-connection.d.ts +38 -0
  111. package/dist/client-connection.d.ts.map +1 -0
  112. package/dist/client-connection.js +210 -0
  113. package/dist/client-connection.js.map +1 -0
  114. package/dist/client-control.d.ts +48 -0
  115. package/dist/client-control.d.ts.map +1 -0
  116. package/dist/client-control.js +273 -0
  117. package/dist/client-control.js.map +1 -0
  118. package/dist/client-locale.d.ts +8 -0
  119. package/dist/client-locale.d.ts.map +1 -1
  120. package/dist/client-locale.js +16 -0
  121. package/dist/client-locale.js.map +1 -1
  122. package/dist/client-runtime-contract.d.ts +161 -0
  123. package/dist/client-runtime-contract.d.ts.map +1 -0
  124. package/dist/client-runtime-contract.js +127 -0
  125. package/dist/client-runtime-contract.js.map +1 -0
  126. package/dist/client-runtime.d.ts +24 -126
  127. package/dist/client-runtime.d.ts.map +1 -1
  128. package/dist/client-runtime.js +171 -867
  129. package/dist/client-runtime.js.map +1 -1
  130. package/dist/client-secure-transport.d.ts +1 -0
  131. package/dist/client-secure-transport.d.ts.map +1 -1
  132. package/dist/client-secure-transport.js +35 -16
  133. package/dist/client-secure-transport.js.map +1 -1
  134. package/dist/client-workspace-queries.d.ts +12 -0
  135. package/dist/client-workspace-queries.d.ts.map +1 -0
  136. package/dist/client-workspace-queries.js +66 -0
  137. package/dist/client-workspace-queries.js.map +1 -0
  138. package/dist/client.d.ts.map +1 -1
  139. package/dist/client.github.js +2091 -1896
  140. package/dist/client.js +2091 -1896
  141. package/dist/client.js.map +1 -1
  142. package/dist/codex/domain.d.ts.map +1 -1
  143. package/dist/codex/domain.js +67 -46
  144. package/dist/codex/domain.js.map +1 -1
  145. package/dist/codex/method-policy.d.ts +9 -9
  146. package/dist/codex/virtual-catalog.d.ts +90 -0
  147. package/dist/codex/virtual-catalog.d.ts.map +1 -0
  148. package/dist/codex/virtual-catalog.js +317 -0
  149. package/dist/codex/virtual-catalog.js.map +1 -0
  150. package/dist/codex/virtual-contract.d.ts +96 -0
  151. package/dist/codex/virtual-contract.d.ts.map +1 -0
  152. package/dist/codex/virtual-contract.js +192 -0
  153. package/dist/codex/virtual-contract.js.map +1 -0
  154. package/dist/codex/virtual-event-carrier.d.ts +52 -0
  155. package/dist/codex/virtual-event-carrier.d.ts.map +1 -0
  156. package/dist/codex/virtual-event-carrier.js +212 -0
  157. package/dist/codex/virtual-event-carrier.js.map +1 -0
  158. package/dist/codex/virtual-harness.d.ts +16 -117
  159. package/dist/codex/virtual-harness.d.ts.map +1 -1
  160. package/dist/codex/virtual-harness.js +123 -1909
  161. package/dist/codex/virtual-harness.js.map +1 -1
  162. package/dist/codex/virtual-history.d.ts +74 -0
  163. package/dist/codex/virtual-history.d.ts.map +1 -0
  164. package/dist/codex/virtual-history.js +546 -0
  165. package/dist/codex/virtual-history.js.map +1 -0
  166. package/dist/codex/virtual-live.d.ts +75 -0
  167. package/dist/codex/virtual-live.d.ts.map +1 -0
  168. package/dist/codex/virtual-live.js +563 -0
  169. package/dist/codex/virtual-live.js.map +1 -0
  170. package/dist/codex/virtual-values.d.ts +29 -0
  171. package/dist/codex/virtual-values.d.ts.map +1 -0
  172. package/dist/codex/virtual-values.js +75 -0
  173. package/dist/codex/virtual-values.js.map +1 -0
  174. package/dist/config.js +4 -4
  175. package/dist/config.js.map +1 -1
  176. package/dist/control-runtime.js +2 -2
  177. package/dist/control-runtime.js.map +1 -1
  178. package/dist/harness-remote-bridge.d.ts +2 -1
  179. package/dist/harness-remote-bridge.d.ts.map +1 -1
  180. package/dist/harness-remote-bridge.js +13 -5
  181. package/dist/harness-remote-bridge.js.map +1 -1
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +23304 -15332
  184. package/dist/index.js.map +4 -4
  185. package/dist/plugin-route-dispatcher.d.ts +2 -2
  186. package/dist/plugin-route-dispatcher.d.ts.map +1 -1
  187. package/dist/plugin-route-dispatcher.js +2 -2
  188. package/dist/plugin-route-dispatcher.js.map +1 -1
  189. package/dist/remote-terminal-controller.d.ts +90 -0
  190. package/dist/remote-terminal-controller.d.ts.map +1 -0
  191. package/dist/remote-terminal-controller.js +494 -0
  192. package/dist/remote-terminal-controller.js.map +1 -0
  193. package/dist/remote-terminal-provider.d.ts +46 -0
  194. package/dist/remote-terminal-provider.d.ts.map +1 -0
  195. package/dist/remote-terminal-provider.js +147 -0
  196. package/dist/remote-terminal-provider.js.map +1 -0
  197. package/dist/remote-typert-gateway.js +7 -1
  198. package/dist/remote-typert-gateway.js.map +1 -1
  199. package/dist/server-api.d.ts +3 -0
  200. package/dist/server-api.d.ts.map +1 -1
  201. package/dist/server-api.js +24 -9
  202. package/dist/server-api.js.map +1 -1
  203. package/dist/server-connection.d.ts +1 -0
  204. package/dist/server-connection.d.ts.map +1 -1
  205. package/dist/server-connection.js +8 -1
  206. package/dist/server-connection.js.map +1 -1
  207. package/dist/service.d.ts +1 -1
  208. package/dist/service.d.ts.map +1 -1
  209. package/dist/service.js +15 -8
  210. package/dist/service.js.map +1 -1
  211. package/dist/terminal-carrier-compat.d.ts +14 -0
  212. package/dist/terminal-carrier-compat.d.ts.map +1 -0
  213. package/dist/terminal-carrier-compat.js +259 -0
  214. package/dist/terminal-carrier-compat.js.map +1 -0
  215. package/dist/terminal-policy.d.ts +6 -0
  216. package/dist/terminal-policy.d.ts.map +1 -1
  217. package/dist/terminal-policy.js +24 -6
  218. package/dist/terminal-policy.js.map +1 -1
  219. package/dist/typert-gateway-contract.d.ts +6 -1
  220. package/dist/typert-gateway-contract.d.ts.map +1 -1
  221. package/dist/typert-gateway-switch.d.ts +2 -1
  222. package/dist/typert-gateway-switch.d.ts.map +1 -1
  223. package/dist/typert-gateway-switch.js +39 -18
  224. package/dist/typert-gateway-switch.js.map +1 -1
  225. package/dist/version.d.ts +1 -1
  226. package/dist/version.d.ts.map +1 -1
  227. package/dist/version.js +1 -1
  228. package/dist/version.js.map +1 -1
  229. package/dist/workspace-bridge.d.ts +6 -89
  230. package/dist/workspace-bridge.d.ts.map +1 -1
  231. package/dist/workspace-bridge.js +37 -294
  232. package/dist/workspace-bridge.js.map +1 -1
  233. package/dsh-plugin.json +1 -1
  234. package/package.json +24 -20
@@ -0,0 +1,259 @@
1
+ import { z } from 'zod';
2
+ import { RpcError } from './safe-error.js';
3
+ import { uuidV7 } from './ids.js';
4
+ const identity = z.string().regex(/^[A-Za-z0-9_:-]{1,256}$/);
5
+ const attachmentArgs = z.object({ agentId: identity, id: identity, attachmentId: identity }).strict();
6
+ const dimensions = { cols: z.number().int().min(1).max(1000), rows: z.number().int().min(1).max(1000) };
7
+ const input = z.discriminatedUnion('type', [
8
+ z.object({ type: z.literal('write'), sequence: z.number().int().positive().safe(), data: z.string().max(64 * 1024) }).strict(),
9
+ z.object({ type: z.literal('resize'), sequence: z.number().int().positive().safe(), ...dimensions }).strict(),
10
+ ]);
11
+ /** Fixed terminal API changed in 0.2.1-alpha.3; other streams remain read-only. */
12
+ export function usesDuplexTerminal(version) {
13
+ const match = /^(?:dsh-)?v?0\.(\d+)\.(\d+)(?:-([^+]+))?(?:\+.*)?$/.exec(version ?? '');
14
+ if (!match)
15
+ return false;
16
+ const minor = Number(match[1]), patch = Number(match[2]);
17
+ if (minor > 2 || (minor === 2 && patch > 1))
18
+ return true;
19
+ if (minor !== 2 || patch !== 1)
20
+ return false;
21
+ return match[3] === undefined || !match[3].startsWith('alpha.') || Number(match[3].slice(6)) >= 3;
22
+ }
23
+ /** Bounded single-consumer queue. Closing discards inputs, never replays them. */
24
+ class Queue {
25
+ maxBytes;
26
+ maxItems;
27
+ values = [];
28
+ bytes = 0;
29
+ wake;
30
+ closed = false;
31
+ error;
32
+ constructor(maxBytes = 256 * 1024, maxItems = 64) {
33
+ this.maxBytes = maxBytes;
34
+ this.maxItems = maxItems;
35
+ }
36
+ push(value) {
37
+ if (this.closed)
38
+ throw new RpcError('TRANSPORT_CLOSED', 'The terminal attachment closed.');
39
+ const bytes = new TextEncoder().encode(JSON.stringify(value)).byteLength;
40
+ if (this.values.length >= this.maxItems || this.bytes + bytes > this.maxBytes)
41
+ throw new RpcError('RATE_LIMITED', 'The terminal attachment buffer is full.');
42
+ this.values.push({ value, bytes });
43
+ this.bytes += bytes;
44
+ this.wake?.();
45
+ }
46
+ close(error, discard = false) {
47
+ if (this.closed)
48
+ return;
49
+ this.closed = true;
50
+ this.error = error;
51
+ if (discard) {
52
+ this.values = [];
53
+ this.bytes = 0;
54
+ }
55
+ this.wake?.();
56
+ }
57
+ async *[Symbol.asyncIterator]() {
58
+ while (true) {
59
+ const entry = this.values.shift();
60
+ if (entry) {
61
+ this.bytes -= entry.bytes;
62
+ yield entry.value;
63
+ }
64
+ else if (this.closed)
65
+ break;
66
+ else
67
+ await new Promise(resolve => { this.wake = resolve; });
68
+ }
69
+ if (this.error)
70
+ throw this.error;
71
+ }
72
+ }
73
+ /** Existing Remote follow/write/resize calls terminate at the official attach stream. */
74
+ export class TerminalCarrierCompat {
75
+ gateway;
76
+ attachments = new Map();
77
+ constructor(gateway) {
78
+ this.gateway = gateway;
79
+ }
80
+ async open(payload, signal) {
81
+ signal.throwIfAborted();
82
+ const args = attachmentArgs.parse(z.object({ args: z.unknown() }).strict().parse(payload).args);
83
+ const key = `${args.agentId}/${args.id}`;
84
+ this.attachments.get(key)?.control.abort();
85
+ const control = new AbortController();
86
+ const queue = new Queue();
87
+ const entry = { args, control, queue, sequence: 0, writable: false, pending: new Map() };
88
+ const lifetime = AbortSignal.any([signal, control.signal]);
89
+ const close = () => {
90
+ queue.close(undefined, true);
91
+ for (const pending of entry.pending.values())
92
+ pending.reject(new RpcError('TRANSPORT_CLOSED', 'The terminal attachment closed. Input will not be replayed.'));
93
+ entry.pending.clear();
94
+ if (this.attachments.get(key) === entry)
95
+ this.attachments.delete(key);
96
+ };
97
+ lifetime.addEventListener('abort', close, { once: true });
98
+ lifetime.throwIfAborted();
99
+ this.attachments.set(key, entry);
100
+ let source;
101
+ try {
102
+ source = await this.gateway.open('terminal/attach', { args: { agentId: args.agentId, id: args.id } }, lifetime, queue);
103
+ }
104
+ catch (error) {
105
+ control.abort();
106
+ throw error;
107
+ }
108
+ return (async function* () {
109
+ try {
110
+ for await (const value of source) {
111
+ if (lifetime.aborted)
112
+ break;
113
+ if (isRecord(value) && value.type === 'ack') {
114
+ const pending = entry.pending.get(Number(value.sequence));
115
+ if (!pending)
116
+ throw new RpcError('INVALID_MESSAGE', 'Unexpected terminal input acknowledgement.');
117
+ entry.pending.delete(Number(value.sequence));
118
+ if (value.refusal)
119
+ pending.reject(new RpcError('PERMISSION_DENIED', 'Terminal input was refused.'));
120
+ else
121
+ pending.resolve();
122
+ }
123
+ else if (isRecord(value) && (value.type === 'snapshot' || value.type === 'state') && isRecord(value.info)) {
124
+ entry.writable = value.writable === true;
125
+ yield { ...value, info: { ...value.info, ...(entry.writable ? { controllerId: args.attachmentId } : {}) } };
126
+ }
127
+ else
128
+ yield value;
129
+ }
130
+ }
131
+ finally {
132
+ control.abort();
133
+ lifetime.removeEventListener('abort', close);
134
+ }
135
+ })();
136
+ }
137
+ async call(endpoint, payload, signal) {
138
+ const fields = endpoint === 'terminal/write' ? { data: z.string().max(64 * 1024) } : dimensions;
139
+ const args = attachmentArgs.extend(fields).parse(z.object({ args: z.unknown() }).strict().parse(payload).args);
140
+ const entry = this.attachments.get(`${args.agentId}/${args.id}`);
141
+ if (!entry || entry.args.attachmentId !== args.attachmentId || !entry.writable)
142
+ throw new RpcError('PERMISSION_DENIED', 'This terminal input attachment is not writable.');
143
+ if (entry.pending.size >= 32)
144
+ throw new RpcError('RATE_LIMITED', 'Too many unacknowledged terminal inputs.');
145
+ signal.throwIfAborted();
146
+ const sequence = ++entry.sequence;
147
+ const value = input.parse({ type: endpoint === 'terminal/write' ? 'write' : 'resize', sequence,
148
+ ...('data' in args ? { data: args.data } : { cols: args.cols, rows: args.rows }) });
149
+ const abort = () => entry.control.abort();
150
+ signal.addEventListener('abort', abort, { once: true });
151
+ try {
152
+ await new Promise((resolve, reject) => {
153
+ entry.pending.set(sequence, { resolve, reject });
154
+ try {
155
+ entry.queue.push(value);
156
+ }
157
+ catch (error) {
158
+ entry.pending.delete(sequence);
159
+ entry.control.abort();
160
+ reject(error);
161
+ }
162
+ });
163
+ return { ok: true };
164
+ }
165
+ finally {
166
+ signal.removeEventListener('abort', abort);
167
+ }
168
+ }
169
+ }
170
+ /** Native RC.1 Client attach stream over the existing encrypted terminal subset. */
171
+ export async function openRemoteTerminal(target, payload, signal, uplink) {
172
+ const args = z.object({ agentId: identity, id: identity }).strict().parse(z.object({ args: z.unknown() }).strict().parse(payload).args);
173
+ const attachmentId = uuidV7();
174
+ const control = new AbortController();
175
+ const lifetime = AbortSignal.any([signal, control.signal]);
176
+ const output = new Queue(4 * 1024 * 1024, 256);
177
+ let writable = false;
178
+ const iterator = uplink[Symbol.asyncIterator]();
179
+ const abort = () => { output.close(); void iterator.return?.().catch(() => undefined); };
180
+ lifetime.addEventListener('abort', abort, { once: true });
181
+ lifetime.throwIfAborted();
182
+ let source;
183
+ try {
184
+ source = await target.open('terminal/follow', { args: { ...args, attachmentId } }, lifetime);
185
+ }
186
+ catch (error) {
187
+ control.abort();
188
+ throw error;
189
+ }
190
+ let startInput;
191
+ const ready = new Promise(resolve => { startInput = resolve; });
192
+ lifetime.addEventListener('abort', startInput, { once: true });
193
+ if (lifetime.aborted)
194
+ startInput();
195
+ void (async () => {
196
+ try {
197
+ for await (const value of source) {
198
+ if (lifetime.aborted)
199
+ break;
200
+ if (isRecord(value) && (value.type === 'snapshot' || value.type === 'state') && isRecord(value.info)) {
201
+ writable = value.info.controllerId === attachmentId;
202
+ output.push({ ...value, writable });
203
+ if (value.type === 'snapshot')
204
+ startInput();
205
+ }
206
+ else
207
+ output.push(value);
208
+ }
209
+ }
210
+ catch (error) {
211
+ output.close(error);
212
+ }
213
+ finally {
214
+ control.abort();
215
+ }
216
+ })();
217
+ void (async () => {
218
+ let sequence = 0;
219
+ try {
220
+ await ready;
221
+ while (!lifetime.aborted) {
222
+ const next = await iterator.next();
223
+ if (next.done || lifetime.aborted)
224
+ break;
225
+ const value = input.parse(next.value);
226
+ if (value.sequence !== ++sequence)
227
+ throw new RpcError('INVALID_MESSAGE', 'Terminal input sequence is invalid.');
228
+ if (!writable) {
229
+ output.push({ type: 'ack', sequence, refusal: 'read-only' });
230
+ continue;
231
+ }
232
+ const result = await target.dispatch(`terminal/${value.type}`, { args: { ...args, attachmentId,
233
+ ...(value.type === 'write' ? { data: value.data } : { cols: value.cols, rows: value.rows }) } }, lifetime);
234
+ if (!result.ok)
235
+ throw Object.assign(new Error(result.error.message), result.error);
236
+ if (!lifetime.aborted)
237
+ output.push({ type: 'ack', sequence });
238
+ }
239
+ }
240
+ catch (error) {
241
+ output.close(error);
242
+ control.abort();
243
+ }
244
+ })();
245
+ return (async function* () {
246
+ try {
247
+ yield* output;
248
+ }
249
+ finally {
250
+ control.abort();
251
+ lifetime.removeEventListener('abort', abort);
252
+ lifetime.removeEventListener('abort', startInput);
253
+ }
254
+ })();
255
+ }
256
+ function isRecord(value) {
257
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
258
+ }
259
+ //# sourceMappingURL=terminal-carrier-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-carrier-compat.js","sourceRoot":"","sources":["../src/terminal-carrier-compat.ts"],"names":[],"mappings":"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"}
@@ -6,15 +6,21 @@ export declare class TerminalPolicy {
6
6
  private readonly enabled;
7
7
  private readonly deviceId;
8
8
  private readonly owners;
9
+ private static readonly claims;
9
10
  private readonly attachments;
11
+ private readonly claims;
10
12
  constructor(enabled: boolean | (() => boolean), deviceId: string, owners: Map<string, string>);
13
+ /** Host process cleanup releases the exact terminal identity for every connection. */
14
+ static releaseOwner(owners: Map<string, string>, key: string): void;
11
15
  check(endpoint: string, payload: unknown): {
12
16
  key?: string;
13
17
  created?: boolean;
18
+ claim?: object;
14
19
  };
15
20
  result(endpoint: string, payload: unknown, result: TypertRpcResult, reservation: {
16
21
  key?: string;
17
22
  created?: boolean;
23
+ claim?: object;
18
24
  }): TypertRpcResult;
19
25
  private deny;
20
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-policy.d.ts","sourceRoot":"","sources":["../src/terminal-policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAGnE,eAAO,MAAM,cAAc,aACoE,CAAA;AAC/F,eAAO,MAAM,gBAAgB,aAAkD,CAAA;AAG/E,kGAAkG;AAClG,qBAAa,cAAc;IAEb,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA6B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACxF,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;gBAC3B,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAAmB,QAAQ,EAAE,MAAM,EAC/E,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAE9C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IA6B9E,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,eAAe;IActI,OAAO,CAAC,IAAI;CACb"}
1
+ {"version":3,"file":"terminal-policy.d.ts","sourceRoot":"","sources":["../src/terminal-policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAGnE,eAAO,MAAM,cAAc,aACoE,CAAA;AAC/F,eAAO,MAAM,gBAAgB,aAAkD,CAAA;AAG/E,kGAAkG;AAClG,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA6B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACxF,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAA0D;IACxF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoD;IAChF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBACf,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAAmB,QAAQ,EAAE,MAAM,EAC/E,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAK9C,sFAAsF;IACtF,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKnE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA+B9F,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe;IAkBtJ,OAAO,CAAC,IAAI;CACb"}
@@ -10,15 +10,27 @@ export class TerminalPolicy {
10
10
  enabled;
11
11
  deviceId;
12
12
  owners;
13
+ static claims = new WeakMap();
13
14
  attachments = new Map();
15
+ claims;
14
16
  constructor(enabled, deviceId, owners) {
15
17
  this.enabled = enabled;
16
18
  this.deviceId = deviceId;
17
19
  this.owners = owners;
20
+ this.claims = TerminalPolicy.claims.get(owners) ?? new Map();
21
+ TerminalPolicy.claims.set(owners, this.claims);
22
+ }
23
+ /** Host process cleanup releases the exact terminal identity for every connection. */
24
+ static releaseOwner(owners, key) {
25
+ owners.delete(key);
26
+ TerminalPolicy.claims.get(owners)?.delete(key);
18
27
  }
19
28
  check(endpoint, payload) {
20
29
  if (!(typeof this.enabled === 'function' ? this.enabled() : this.enabled))
21
30
  throw new RpcError('TERMINAL_DISABLED', 'Remote terminal is disabled on this Host. Enable Remote terminal in the Host Remote settings; the switch saves and applies immediately. / 远程终端未开启,请在 Host 的 Remote 设置中开启「远程终端」,开关切换后立即保存并生效。');
31
+ for (const [key, attachment] of this.attachments)
32
+ if (this.owners.get(key) !== this.deviceId || this.claims.get(key) !== attachment.claim)
33
+ this.attachments.delete(key);
22
34
  const args = z.object({ args: z.record(z.unknown()) }).strict().parse(payload).args;
23
35
  const rawSessionId = args.agentId ?? args.sessionId;
24
36
  const sessionId = id.parse(rawSessionId);
@@ -38,21 +50,27 @@ export class TerminalPolicy {
38
50
  throw new RpcError('RATE_LIMITED', 'Too many retained remote terminals.');
39
51
  const created = !this.owners.has(key);
40
52
  this.owners.set(key, this.deviceId);
41
- return { key, created };
53
+ if (created || !this.claims.has(key))
54
+ this.claims.set(key, {});
55
+ return { key, created, claim: this.claims.get(key) };
42
56
  }
43
57
  if (this.owners.get(key) !== this.deviceId)
44
58
  this.deny();
45
59
  if (endpoint === 'terminal/follow')
46
- this.attachments.set(key, id.parse(args.attachmentId));
60
+ this.attachments.set(key, { id: id.parse(args.attachmentId), claim: this.claims.get(key) });
47
61
  if (endpoint === 'terminal/write' || endpoint === 'terminal/resize') {
48
- if (this.attachments.get(key) !== id.parse(args.attachmentId))
62
+ if (this.attachments.get(key)?.id !== id.parse(args.attachmentId))
49
63
  this.deny();
50
64
  }
51
- return { key };
65
+ return { key, claim: this.claims.get(key) };
52
66
  }
53
67
  result(endpoint, payload, result, reservation) {
54
- if (reservation.key !== undefined && ((!result.ok && reservation.created) || (result.ok && endpoint === 'terminal/close'))) {
55
- this.owners.delete(reservation.key);
68
+ const releases = (!result.ok && reservation.created && result.error.code !== 'TERMINAL_CLEANUP_FAILED') || (result.ok && endpoint === 'terminal/close');
69
+ // Cleanup can finish before an older RPC response. Its response must not
70
+ // release a new allocation that has since claimed the same identity.
71
+ if (reservation.key !== undefined && releases && this.owners.get(reservation.key) === this.deviceId
72
+ && this.claims.get(reservation.key) === reservation.claim) {
73
+ TerminalPolicy.releaseOwner(this.owners, reservation.key);
56
74
  this.attachments.delete(reservation.key);
57
75
  }
58
76
  if (endpoint === 'terminal/list' && result.ok && Array.isArray(result.value)) {
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-policy.js","sourceRoot":"","sources":["../src/terminal-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-policy.js","sourceRoot":"","sources":["../src/terminal-policy.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export interface TypertGatewayRequest {
4
4
  /** Typert Remote payloads require one plain object under `args`. */
5
5
  args: Readonly<Record<string, unknown>>;
6
6
  signal?: AbortSignal;
7
+ peer?: unknown;
8
+ uplink?: AsyncIterable<unknown>;
7
9
  }
8
10
  export type TypertRpcResult = {
9
11
  ok: true;
@@ -47,13 +49,16 @@ export interface TypertGatewayLike {
47
49
  /** Carrier-level face captured from the alpha Gateway before target switching. */
48
50
  export interface LocalTypertGateway extends TypertGatewayLike {
49
51
  dispatch(endpoint: string, payload: unknown, signal: AbortSignal): Promise<TypertRpcResult>;
50
- open(endpoint: string, payload: unknown, signal: AbortSignal): Promise<AsyncIterable<unknown>>;
52
+ open(endpoint: string, payload: unknown, signal: AbortSignal, uplink?: AsyncIterable<unknown>): Promise<AsyncIterable<unknown>>;
51
53
  failure(error: unknown): {
52
54
  code: string;
53
55
  message: string;
54
56
  details: Record<string, unknown>;
55
57
  };
56
58
  supportsCarrier: boolean;
59
+ peer?: unknown;
60
+ createPeer?(): LocalTypertGateway;
61
+ dispose?(): Promise<void>;
57
62
  }
58
63
  export interface RemoteTypertGatewayTarget {
59
64
  invoke(request: TypertGatewayRequest): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"typert-gateway-contract.d.ts","sourceRoot":"","sources":["../src/typert-gateway-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typert-gateway-contract.d.ts","sourceRoot":"","sources":["../src/typert-gateway-contract.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACvC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,EAAE,CAAA;CAAE,GACjH;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,CAAA;AAE7F,mFAAmF;AACnF,MAAM,MAAM,oBAAoB,GAAG,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;AAEpC;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;AAEpC,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAA;AAE3E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,oBAAoB,CAAA;IAC1B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAC7F;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvD,MAAM,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;IACvE,UAAU,CAAC,EAAE,2BAA2B,CAAA;CACzC;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC3F,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/H,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;IAC5F,eAAe,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,IAAI,kBAAkB,CAAA;IACjC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC3F,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;CAC/F"}
@@ -22,7 +22,7 @@ export declare class TypertGatewaySwitch {
22
22
  private installed;
23
23
  constructor(gateway: TypertGatewayLike);
24
24
  /** Original local dispatcher, used by the Host bridge without switch recursion. */
25
- local(): LocalTypertGateway;
25
+ local(peer?: unknown): LocalTypertGateway;
26
26
  supportsCarrier(): boolean;
27
27
  status(): {
28
28
  mode: 'local' | 'remote';
@@ -40,6 +40,7 @@ export declare class TypertGatewaySwitch {
40
40
  /** Keep the selected authority after transport loss; only explicit exit returns local. */
41
41
  disconnectRemote(): void;
42
42
  restore(): void;
43
+ private openRemote;
43
44
  private selectInvoke;
44
45
  private failure;
45
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"typert-gateway-switch.d.ts","sourceRoot":"","sources":["../src/typert-gateway-switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAElB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AAErC,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AA2BvE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd;AAID,gFAAgF;AAChF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA0C;IACvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAa;IACxC,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,MAAM,CAAC,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,EAAE,iBAAiB;IAYtC,mFAAmF;IACnF,KAAK,IAAI,kBAAkB;IAuB3B,eAAe,IAAI,OAAO;IAI1B,MAAM,IAAI;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAMnF,OAAO,IAAI,IAAI;IAiCf,YAAY,CACV,MAAM,EAAE,YAAY,GAAG,yBAAyB,EAChD,OAAO,GAAE,oBAA0C,EACnD,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC1C,IAAI;IAQP,WAAW,IAAI,IAAI;IAOnB,0FAA0F;IAC1F,gBAAgB,IAAI,IAAI;IAexB,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,OAAO;CAQhB"}
1
+ {"version":3,"file":"typert-gateway-switch.d.ts","sourceRoot":"","sources":["../src/typert-gateway-switch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,kBAAkB,EAElB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AAErC,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AA2BvE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd;AAID,gFAAgF;AAChF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA0C;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA0C;IACvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAa;IACxC,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,MAAM,CAAC,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,EAAE,iBAAiB;IAYtC,mFAAmF;IACnF,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,kBAAkB;IAyBzC,eAAe,IAAI,OAAO;IAI1B,MAAM,IAAI;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAMnF,OAAO,IAAI,IAAI;IAsCf,YAAY,CACV,MAAM,EAAE,YAAY,GAAG,yBAAyB,EAChD,OAAO,GAAE,oBAA0C,EACnD,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC1C,IAAI;IAQP,WAAW,IAAI,IAAI;IAOnB,0FAA0F;IAC1F,gBAAgB,IAAI,IAAI;IAexB,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,OAAO;CAQhB"}
@@ -1,3 +1,4 @@
1
+ import { openRemoteTerminal } from './terminal-carrier-compat.js';
1
2
  const REMOTE_COMMAND_METHODS = ['execute', 'list'];
2
3
  const LOCAL_ONLY_NAMESPACES = new Set(['dynamicCordisRunner']);
3
4
  const ALL_REMOTE_COMMANDS = { execute: true, list: true };
@@ -29,24 +30,26 @@ export class TypertGatewaySwitch {
29
30
  this.localOpen = createLocalOpen(gateway, this.runtime);
30
31
  }
31
32
  /** Original local dispatcher, used by the Host bridge without switch recursion. */
32
- local() {
33
- const dispatch = this.localDispatch ?? (async (endpoint, payload, signal) => {
33
+ local(peer) {
34
+ const invoke = request => this.localInvoke({ ...request, ...(peer === undefined ? {} : { peer }) });
35
+ const dispatch = this.localDispatch === undefined ? (async (endpoint, payload, signal) => {
34
36
  try {
35
37
  const request = requestFromCarrier(endpoint, payload, signal);
36
- return { ok: true, value: await this.localInvoke(request) };
38
+ return { ok: true, value: await invoke(request) };
37
39
  }
38
40
  catch (error) {
39
41
  return { ok: false, error: this.failure(error) };
40
42
  }
41
- });
42
- const open = this.localOpen ?? (async (endpoint, payload, signal) => {
43
+ }) : (endpoint, payload, signal) => this.localDispatch(endpoint, payload, signal, peer);
44
+ const open = this.localOpen === undefined ? (async (endpoint, payload, signal) => {
43
45
  if (this.localStream === undefined)
44
46
  throw new Error('The local Harness Gateway does not support Remote streams.');
45
- return this.localStream(requestFromCarrier(endpoint, payload, signal));
46
- });
47
+ return this.localStream({ ...requestFromCarrier(endpoint, payload, signal), ...(peer === undefined ? {} : { peer }) });
48
+ }) : (endpoint, payload, signal, uplink) => this.localOpen(endpoint, payload, signal, uplink, peer);
47
49
  return {
48
- invoke: this.localInvoke,
49
- ...(this.localStream === undefined ? {} : { stream: this.localStream }),
50
+ invoke,
51
+ peer,
52
+ ...(this.localStream === undefined ? {} : { stream: (request) => this.localStream({ ...request, ...(peer === undefined ? {} : { peer }) }) }),
50
53
  dispatch,
51
54
  open,
52
55
  failure: error => this.failure(error),
@@ -68,12 +71,17 @@ export class TypertGatewaySwitch {
68
71
  if (this.originalStream !== undefined) {
69
72
  this.runtime.stream = request => this.remoteTarget === undefined || isLocalOnlyEndpoint(endpointOf(request))
70
73
  ? this.localStream(request)
71
- : this.remoteTarget.open(endpointOf(request), { args: request.args }, request.signal ?? new AbortController().signal);
74
+ : this.openRemote(endpointOf(request), { args: request.args }, request.signal ?? new AbortController().signal, request.uplink);
72
75
  }
73
76
  if (this.originalDispatch !== undefined) {
74
- this.runtime.dispatchRpc = (endpoint, payload, signal) => this.remoteTarget === undefined || isLocalOnlyEndpoint(endpoint)
75
- ? this.localDispatch(endpoint, payload, signal)
76
- : this.remoteTarget.dispatch(endpoint, payload, signal).then(result => workspaceConnectionResult(endpoint, result), error => ({ ok: false, error: this.failure(error) }));
77
+ this.runtime.dispatchRpc = (...args) => {
78
+ const [endpoint, payload, signal] = args;
79
+ // The local Gateway owns the caller's Peer and its lifetime. Preserve
80
+ // every carrier argument; Peer objects never cross the Remote tunnel.
81
+ return this.remoteTarget === undefined || isLocalOnlyEndpoint(endpoint)
82
+ ? this.localDispatch(...args)
83
+ : this.remoteTarget.dispatch(endpoint, payload, signal).then(result => workspaceConnectionResult(endpoint, result), error => ({ ok: false, error: this.failure(error) }));
84
+ };
77
85
  }
78
86
  if (this.originalOpen !== undefined) {
79
87
  const open = this.originalOpen;
@@ -86,7 +94,7 @@ export class TypertGatewaySwitch {
86
94
  : open.call(this.runtime, endpoint, callArgs[1], callArgs[2]);
87
95
  }
88
96
  const signal = (rc1 ? callArgs[4] : callArgs[2]);
89
- return this.remoteTarget.open(endpoint, callArgs[1], signal ?? new AbortController().signal);
97
+ return this.openRemote(endpoint, callArgs[1], signal ?? new AbortController().signal, rc1 ? callArgs[2] : undefined);
90
98
  };
91
99
  }
92
100
  this.installed = true;
@@ -134,11 +142,16 @@ export class TypertGatewaySwitch {
134
142
  this.runtime.openWireStream = this.originalOpen;
135
143
  this.installed = false;
136
144
  }
145
+ openRemote(endpoint, payload, signal, uplink) {
146
+ return endpoint === 'terminal/attach'
147
+ ? openRemoteTerminal(this.remoteTarget, payload, signal, uplink ?? endedUplink())
148
+ : this.remoteTarget.open(endpoint, payload, signal);
149
+ }
137
150
  selectInvoke(request) {
138
151
  if (isLocalOnlyEndpoint(endpointOf(request)))
139
152
  return this.localInvoke(request);
140
153
  if (this.remoteTarget !== undefined)
141
- return this.remoteTarget.invoke(request);
154
+ return this.remoteTarget.invoke(request).then(value => normalizeTerminalEnvironment(endpointOf(request), value));
142
155
  if (request.namespace !== 'commands' || !isRemoteCommandMethod(request.method) || this.remoteInvoke === undefined) {
143
156
  return this.localInvoke(request);
144
157
  }
@@ -160,6 +173,8 @@ export class TypertGatewaySwitch {
160
173
  }
161
174
  /** The local Connection HTTP hop needs the same binary envelope as the native Gateway. */
162
175
  function workspaceConnectionResult(endpoint, result) {
176
+ if (endpoint === 'terminal/environment' && result.ok)
177
+ return { ...result, value: normalizeTerminalEnvironment(endpoint, result.value) };
163
178
  if (endpoint !== 'workspaceFiles/readBytes' && endpoint !== 'officeToPdf/render')
164
179
  return result;
165
180
  if (!result.ok || !isRecord(result.value) || !(result.value.data instanceof Uint8Array))
@@ -210,8 +225,8 @@ function createLocalOpen(gateway, runtime) {
210
225
  const open = runtime.openWireStream;
211
226
  if (open !== undefined) {
212
227
  return usesRc1Arity(open)
213
- ? (endpoint, payload, signal) => open
214
- .call(runtime, endpoint, payload, endedUplink(), undefined, signal, linkControl(signal))
228
+ ? (endpoint, payload, signal, uplink, peer) => open
229
+ .call(runtime, endpoint, payload, uplink ?? endedUplink(), peer, signal, linkControl(signal))
215
230
  : (endpoint, payload, signal) => open.call(runtime, endpoint, payload, signal);
216
231
  }
217
232
  const wire = gateway.wireStream;
@@ -220,7 +235,7 @@ function createLocalOpen(gateway, runtime) {
220
235
  const wireOpen = wire.open;
221
236
  if (usesRc1Arity(wireOpen)) {
222
237
  const rc1 = wireOpen;
223
- return (endpoint, payload, signal) => rc1.call(wire, endpoint, payload, endedUplink(), undefined, signal);
238
+ return (endpoint, payload, signal, uplink, peer) => rc1.call(wire, endpoint, payload, uplink ?? endedUplink(), peer, signal);
224
239
  }
225
240
  const legacy = wireOpen;
226
241
  return (endpoint, payload, signal) => legacy.call(wire, endpoint, payload, signal);
@@ -248,4 +263,10 @@ function isRemoteCommandMethod(method) {
248
263
  function isRecord(value) {
249
264
  return typeof value === 'object' && value !== null && !Array.isArray(value);
250
265
  }
266
+ /** RC.1 input flow control also applies to older Hosts and CodeX/ACP projections. */
267
+ function normalizeTerminalEnvironment(endpoint, value) {
268
+ if (endpoint !== 'terminal/environment' || !isRecord(value) || value.maxBufferedBytes !== undefined)
269
+ return value;
270
+ return { ...value, maxBufferedBytes: 256 * 1024 };
271
+ }
251
272
  //# sourceMappingURL=typert-gateway-switch.js.map