dsh-zen-remote 2.2.5 → 2.2.7

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 (103) hide show
  1. package/AGENTS.md +15 -3
  2. package/README.md +10 -2
  3. package/README.zh-CN.md +10 -2
  4. package/docs/interface.md +17 -0
  5. package/docs/remote-access.en.md +9 -2
  6. package/docs/remote-access.md +9 -2
  7. package/lib/adapters/dsh-better-sidebar/index.js +1 -1
  8. package/lib/client-routes.js +3 -0
  9. package/lib/client-routes.js.map +1 -1
  10. package/lib/client.js +1189 -203
  11. package/lib/fetch-route-intercept.js +1 -1
  12. package/lib/index.js +73 -16
  13. package/lib/index.js.map +1 -1
  14. package/lib/intercept.js +13 -0
  15. package/lib/intercept.js.map +1 -1
  16. package/lib/invoke-binary.js +8 -2
  17. package/lib/invoke-binary.js.map +1 -1
  18. package/lib/lan-gate-server.cjs +109 -2
  19. package/lib/owner-peer.js +23 -0
  20. package/lib/owner-peer.js.map +1 -1
  21. package/lib/plugin-adapter-core.js +2 -2
  22. package/lib/relay-access.js +24 -2
  23. package/lib/relay-access.js.map +1 -1
  24. package/lib/relay-client.js +2 -2
  25. package/lib/relay-server.js +103 -100
  26. package/lib/relay-server.js.map +1 -1
  27. package/lib/types/client/MobileAttachButton.d.ts +5 -2
  28. package/lib/types/client/MobileAttachButton.d.ts.map +1 -1
  29. package/lib/types/client/MobileAttachChips.d.ts.map +1 -1
  30. package/lib/types/client/MobileHome.d.ts.map +1 -1
  31. package/lib/types/client/RemoteFileDownload.d.ts +57 -0
  32. package/lib/types/client/RemoteFileDownload.d.ts.map +1 -0
  33. package/lib/types/client/attach-upload.d.ts +32 -0
  34. package/lib/types/client/attach-upload.d.ts.map +1 -1
  35. package/lib/types/client/effects/remote-drop.d.ts +27 -0
  36. package/lib/types/client/effects/remote-drop.d.ts.map +1 -0
  37. package/lib/types/client/index.d.ts.map +1 -1
  38. package/lib/types/client/locales.d.ts +11 -0
  39. package/lib/types/client/locales.d.ts.map +1 -1
  40. package/lib/types/client/remote-file-save.d.ts +112 -0
  41. package/lib/types/client/remote-file-save.d.ts.map +1 -0
  42. package/lib/types/client/settings/SettingsSection.d.ts.map +1 -1
  43. package/lib/types/client/styles/compat.css.d.ts +1 -1
  44. package/lib/types/client/styles/compat.css.d.ts.map +1 -1
  45. package/lib/types/client/styles/header.css.d.ts +1 -1
  46. package/lib/types/client/styles/header.css.d.ts.map +1 -1
  47. package/lib/types/client/styles/home.css.d.ts +1 -1
  48. package/lib/types/client/styles/home.css.d.ts.map +1 -1
  49. package/lib/types/client/styles/layout.css.d.ts +1 -1
  50. package/lib/types/client/styles/layout.css.d.ts.map +1 -1
  51. package/lib/types/client/styles/remote-session.css.d.ts +1 -1
  52. package/lib/types/client/styles/remote-session.css.d.ts.map +1 -1
  53. package/lib/types/client-data/remote-drop.d.ts +99 -0
  54. package/lib/types/client-data/remote-drop.d.ts.map +1 -0
  55. package/lib/types/client-data/settings-form.d.ts +7 -0
  56. package/lib/types/client-data/settings-form.d.ts.map +1 -1
  57. package/lib/types/client-routes.d.ts +6 -0
  58. package/lib/types/client-routes.d.ts.map +1 -1
  59. package/lib/types/index.d.ts.map +1 -1
  60. package/lib/types/intercept.d.ts.map +1 -1
  61. package/lib/types/invoke-binary.d.ts +4 -1
  62. package/lib/types/invoke-binary.d.ts.map +1 -1
  63. package/lib/types/owner-peer.d.ts +9 -0
  64. package/lib/types/owner-peer.d.ts.map +1 -1
  65. package/lib/types/plugin-adapter-core.d.ts +1 -1
  66. package/lib/types/relay-access.d.ts.map +1 -1
  67. package/lib/types/relay-server.d.ts +10 -7
  68. package/lib/types/relay-server.d.ts.map +1 -1
  69. package/package.json +36 -36
  70. package/pwa/inject.js +20 -9
  71. package/pwa/sw.js +97 -21
  72. package/scripts/check-attach-upload.mjs +37 -0
  73. package/scripts/check-remote-drop.mjs +114 -0
  74. package/scripts/check-settings-form.mjs +3 -2
  75. package/scripts/check-upload-endpoint.mjs +14 -3
  76. package/src/adapters/dsh-better-sidebar/index.ts +1 -1
  77. package/src/client/MobileAttachButton.tsx +14 -9
  78. package/src/client/MobileAttachChips.tsx +4 -0
  79. package/src/client/MobileHome.tsx +79 -12
  80. package/src/client/RemoteFileDownload.tsx +173 -0
  81. package/src/client/attach-upload.ts +47 -0
  82. package/src/client/effects/remote-drop.ts +269 -0
  83. package/src/client/index.tsx +47 -0
  84. package/src/client/locales.ts +32 -0
  85. package/src/client/remote-file-save.ts +232 -0
  86. package/src/client/settings/SettingsSection.tsx +61 -1
  87. package/src/client/styles/compat.css.ts +43 -12
  88. package/src/client/styles/header.css.ts +63 -15
  89. package/src/client/styles/home.css.ts +64 -11
  90. package/src/client/styles/layout.css.ts +24 -7
  91. package/src/client/styles/remote-session.css.ts +38 -0
  92. package/src/client-data/remote-drop.ts +127 -0
  93. package/src/client-data/settings-form.ts +10 -0
  94. package/src/client-routes.ts +8 -0
  95. package/src/fetch-route-intercept.ts +1 -1
  96. package/src/index.ts +71 -18
  97. package/src/intercept.ts +13 -0
  98. package/src/invoke-binary.ts +8 -2
  99. package/src/owner-peer.ts +32 -0
  100. package/src/plugin-adapter-core.ts +2 -2
  101. package/src/relay-access.ts +24 -2
  102. package/src/relay-client.ts +2 -2
  103. package/src/relay-server.ts +114 -90
@@ -120,8 +120,7 @@
120
120
  * account management, settings, credentials, the methods located by other
121
121
  * ids (`schedule/update|delete|history`, `goals/create|complete`,
122
122
  * `fileUploads/list|resolve`, `agentPresets/list|read`,
123
- * `permissionPresets/*`, `officeToPdf/*`, `dynamicCordisRunner/*`) — is
124
- * refused by default.
123
+ * `permissionPresets/*`, `dynamicCordisRunner/*`) — is refused by default.
125
124
  *
126
125
  * T31 registered the five session-creating / agent-scoped calls after
127
126
  * verifying their ownership story (see the field notes above): creations
@@ -193,6 +192,29 @@ const RELAY_METHODS = {
193
192
  'workspaceFiles/read': { fields: ['workspaceFileScopeId'] },
194
193
  'workspaceFiles/readBytes': { fields: ['workspaceFileScopeId'] },
195
194
  'workspaceFiles/stat': { fields: ['workspaceFileScopeId'] },
195
+ // Office document preview (2.2.6, remote Word/Excel/PPT). The document
196
+ // preview's Office renderer does NOT convert on the client: it asks the
197
+ // HOST's LibreOffice to turn doc/docx/xls/xlsx/ppt/pptx into PDF
198
+ // (RT dsh-client-ui-sidebar-documentpreview lib/client.js ~6101: the
199
+ // office face is built from `ctx.remote.officeToPdf` +
200
+ // `ctx.remote.workspaceFiles`), so a remote session without this entry
201
+ // fails the preview with `remote-unsupported` — the exact
202
+ // 「此功能暂不支持远程会话」 a client sees when it opens a produced Word
203
+ // file. `render` carries the SAME `workspaceFileScope` lookup as the
204
+ // workspaceFiles group (RT dsh-office-to-pdf lib/typert.remote-client.js:
205
+ // parameter 0 name `workspaceFileScope`, wire `workspaceFileScopeId`,
206
+ // typeSymbol SessionId) and reads under the same permissive rule
207
+ // (absolute paths anywhere the server process can read) — the trust
208
+ // premise accepted above for previews applies unchanged.
209
+ // `officeToPdf/generation` (zero-arity, RT same file `parameters: []`)
210
+ // stays UNREGISTERED on purpose: a field-less call carries no virtual id,
211
+ // so the client's interception never routes it here — it answers from the
212
+ // LOCAL renderer, which is all its cache-invalidation use needs.
213
+ // The RESULT of render carries `data: Uint8Array` (complete PDF bytes), so
214
+ // the method is ALSO registered in invoke-binary.ts's
215
+ // INVOKE_BINARY_RESULT_METHODS — without that marker the JSON channel
216
+ // flattens the typed array and the client's strict codec rejects it.
217
+ 'officeToPdf/render': { fields: ['workspaceFileScopeId'] },
196
218
  // terminal (T41a) — opens SERVER-side by explicit user request (SPEC story
197
219
  // 45). What the client gets is a shell running AS THE SERVER USER, WITHOUT
198
220
  // the agent sandbox or approval restrictions (RT dsh-api-terminal-controller
@@ -1 +1 @@
1
- {"version":3,"file":"relay-access.js","sourceRoot":"","sources":["../src/relay-access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-access.js","sourceRoot":"","sources":["../src/relay-access.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,7 @@ const DEFAULT_IDLE_TIMEOUT_MS = 45_000;
67
67
  const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;
68
68
  /**
69
69
  * The invoke round-trip budget (T31-fix): the configured request timeout
70
- * plus 2 s per MiB of request body, capped at five minutes. The large
70
+ * plus 2 s per MiB of request body, capped at fifteen minutes. The large
71
71
  * bodies are the prompt routes' INLINE images — `session/prompt` /
72
72
  * `subagents/prompt` content blocks carry base64 `image` data, one image up
73
73
  * to 20 MiB by default (`maxImageBytes`, dsh-attachment-local) or ~27 MiB
@@ -75,7 +75,7 @@ const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;
75
75
  * base seconds. The cap never lands below the configured base timeout.
76
76
  */
77
77
  const INVOKE_TIMEOUT_PER_MIB_MS = 2_000;
78
- const INVOKE_TIMEOUT_CAP_MS = 300_000;
78
+ const INVOKE_TIMEOUT_CAP_MS = 900_000;
79
79
  /**
80
80
  * How often an ONLINE client re-runs the handshake purely to refresh the two
81
81
  * names (T59): the server's display name and this device's name in its
@@ -56,7 +56,7 @@ const MAX_BODY_BYTES = 1024 * 1024;
56
56
  * host stores the stream verbatim (`saveFileStreamVerbatim` →
57
57
  * `publishImmutableObjectStream`, RT dsh-attachment-local lib/index.js
58
58
  * ~699-716; the 20 MiB `maxImageBytes` there covers INLINE images only), so
59
- * there is no host number to mirror and this relay picks its own: 100 MiB
59
+ * there is no host number to mirror and this relay picks its own: 500 MiB
60
60
  * per upload, checked first against `Content-Length` (refused before a byte
61
61
  * moves) and then counted while the stream is pumped (a chunked body has no
62
62
  * length header — the sub-client's undici forbids hand-set length headers,
@@ -65,13 +65,16 @@ const MAX_BODY_BYTES = 1024 * 1024;
65
65
  * answer is 413 `payload-too-large`.
66
66
  *
67
67
  * SLOW-LINK BOUND (T51-fix, for the docs): a single legitimate upload is
68
- * also bounded in TIME — the host's HTTP server keeps its default 300 s
69
- * request deadline, and the sub-client's own round-trip budget caps at the
70
- * same 300 s (relay-client.ts, the T31-fix rule) — so a 100 MiB body needs
71
- * roughly 2.8 Mbps sustained end to end; slower links fail the call (the
72
- * client-side refusal keeps the connection state) rather than hanging.
68
+ * also bounded in TIME. The sub-client's own round-trip budget now caps at
69
+ * 15 minutes (relay-client.ts, the T31-fix rule), but the HOST's HTTP server
70
+ * keeps Node's default 300 s request deadline — that is the binding limit:
71
+ * a 500 MiB body needs roughly 14 Mbps sustained end to end, and a slower
72
+ * link fails the call (the client-side refusal keeps the connection state)
73
+ * rather than hanging. Raising the cap past what that deadline can carry
74
+ * would only move the failure, so 500 MiB is the honest ceiling for the
75
+ * current transport.
73
76
  */
74
- export const MAX_UPLOAD_BYTES = 100 * 1024 * 1024;
77
+ export const MAX_UPLOAD_BYTES = 500 * 1024 * 1024;
75
78
  /** The `/api` route the upload channel dispatches into, verbatim from the
76
79
  * host's own registration (RT dsh-client-file-upload lib/index.js:73). */
77
80
  export const UPLOAD_HTTP_PATH = '/api/session/uploadFileBinary';
@@ -240,6 +243,90 @@ function headerValue(req, name) {
240
243
  const value = Array.isArray(raw) ? raw[0] : raw;
241
244
  return typeof value === 'string' ? value : undefined;
242
245
  }
246
+ function pumpUploadBody(req, res, cap, hangUp) {
247
+ let received = 0;
248
+ let tooLarge = false;
249
+ const onClientGone = () => {
250
+ if (!res.writableEnded)
251
+ hangUp.abort();
252
+ };
253
+ res.on('close', onClientGone);
254
+ const body = new ReadableStream({
255
+ start: (controller) => {
256
+ req.pause();
257
+ req.on('data', (chunk) => {
258
+ if (tooLarge)
259
+ return;
260
+ received += chunk.byteLength;
261
+ if (received > cap) {
262
+ tooLarge = true;
263
+ req.pause();
264
+ hangUp.abort();
265
+ try {
266
+ controller.error(new Error('payload-too-large'));
267
+ }
268
+ catch {
269
+ // The consumer may have cancelled first.
270
+ }
271
+ return;
272
+ }
273
+ try {
274
+ controller.enqueue(new Uint8Array(chunk));
275
+ }
276
+ catch {
277
+ req.destroy();
278
+ return;
279
+ }
280
+ if (controller.desiredSize !== null && controller.desiredSize <= 0)
281
+ req.pause();
282
+ });
283
+ req.on('end', () => {
284
+ if (tooLarge)
285
+ return;
286
+ try {
287
+ controller.close();
288
+ }
289
+ catch {
290
+ // Already errored by the consumer's cancel.
291
+ }
292
+ });
293
+ req.on('error', () => {
294
+ if (tooLarge)
295
+ return;
296
+ try {
297
+ controller.error(new Error('upload stream failed'));
298
+ }
299
+ catch {
300
+ // Already errored.
301
+ }
302
+ });
303
+ req.on('close', () => {
304
+ if (tooLarge)
305
+ return;
306
+ try {
307
+ controller.close();
308
+ }
309
+ catch {
310
+ // A hang-up destroy after a clean end — nothing to close.
311
+ }
312
+ });
313
+ },
314
+ pull: () => {
315
+ req.resume();
316
+ },
317
+ cancel: () => {
318
+ req.pause();
319
+ },
320
+ });
321
+ return {
322
+ body,
323
+ received: () => received,
324
+ tooLarge: () => tooLarge,
325
+ detach: () => {
326
+ res.off('close', onClientGone);
327
+ },
328
+ };
329
+ }
243
330
  function isPlainObject(value) {
244
331
  return typeof value === 'object' && value !== null && !Array.isArray(value);
245
332
  }
@@ -1810,94 +1897,10 @@ export function createRelayHandler(options) {
1810
1897
  return;
1811
1898
  }
1812
1899
  // A hang-up cancels the forward mid-stream, like invoke's — and the
1813
- // cap pump below aborts the SAME controller when it trips, so an
1814
- // oversized upload dies at the host side the moment it is judged.
1900
+ // cap pump (pumpUploadBody) aborts the SAME controller when it trips,
1901
+ // so an oversized upload dies at the host side the moment it is judged.
1815
1902
  const hangUp = new AbortController();
1816
- const onClientGone = () => {
1817
- if (!res.writableEnded)
1818
- hangUp.abort();
1819
- };
1820
- res.on('close', onClientGone);
1821
- // The counting pump: the client's chunks are re-emitted into the
1822
- // synthetic body verbatim, counted on the way through, with real
1823
- // backpressure (the socket pauses whenever the host handler is not
1824
- // pulling). Past the cap the pump errors — the host's reader throws
1825
- // out of `requestBodyChunks` and its upload dies mid-write — and the
1826
- // answer below is the relay's own 413 (written before the tail drain),
1827
- // never the host's internal failure envelope. `tooLarge` also detaches
1828
- // the pump from the socket: the tail belongs to drainUpload's bound,
1829
- // which continues from the pump's own count.
1830
- let received = 0;
1831
- let tooLarge = false;
1832
- const body = new ReadableStream({
1833
- start: (controller) => {
1834
- req.pause();
1835
- req.on('data', (chunk) => {
1836
- if (tooLarge)
1837
- return;
1838
- received += chunk.byteLength;
1839
- if (received > uploadCapBytes) {
1840
- tooLarge = true;
1841
- req.pause();
1842
- hangUp.abort();
1843
- try {
1844
- controller.error(new Error('payload-too-large'));
1845
- }
1846
- catch {
1847
- // The host consumer may have cancelled first.
1848
- }
1849
- return;
1850
- }
1851
- try {
1852
- controller.enqueue(new Uint8Array(chunk));
1853
- }
1854
- catch {
1855
- req.destroy();
1856
- return;
1857
- }
1858
- if (controller.desiredSize !== null && controller.desiredSize <= 0)
1859
- req.pause();
1860
- });
1861
- req.on('end', () => {
1862
- if (tooLarge)
1863
- return;
1864
- try {
1865
- controller.close();
1866
- }
1867
- catch {
1868
- // Already errored by the consumer's cancel.
1869
- }
1870
- });
1871
- req.on('error', () => {
1872
- if (tooLarge)
1873
- return;
1874
- try {
1875
- controller.error(new Error('upload stream failed'));
1876
- }
1877
- catch {
1878
- // Already errored.
1879
- }
1880
- });
1881
- req.on('close', () => {
1882
- if (tooLarge)
1883
- return;
1884
- try {
1885
- controller.close();
1886
- }
1887
- catch {
1888
- // A hang-up destroy after a clean end — nothing to close.
1889
- }
1890
- });
1891
- },
1892
- pull: () => {
1893
- req.resume();
1894
- },
1895
- cancel: () => {
1896
- // The host consumer stopped reading (its own error path): stop
1897
- // pulling from the client too — the drain below finishes the wire.
1898
- req.pause();
1899
- },
1900
- });
1903
+ const pump = pumpUploadBody(req, res, uploadCapBytes, hangUp);
1901
1904
  let request;
1902
1905
  try {
1903
1906
  // The URL is composed from the DECISION's normalized query alone,
@@ -1907,7 +1910,7 @@ export function createRelayHandler(options) {
1907
1910
  const init = {
1908
1911
  method: 'POST',
1909
1912
  headers: { 'content-type': 'application/octet-stream' },
1910
- body,
1913
+ body: pump.body,
1911
1914
  signal: hangUp.signal,
1912
1915
  };
1913
1916
  init.duplex = 'half';
@@ -1931,10 +1934,10 @@ export function createRelayHandler(options) {
1931
1934
  // wire, and the sub-client reconstructs the exact Response its UI
1932
1935
  // would have seen locally.
1933
1936
  const bodyText = await upstream.text();
1934
- if (tooLarge) {
1937
+ if (pump.tooLarge()) {
1935
1938
  res.setHeader('Connection', 'close');
1936
1939
  responseJson(res, 413, PAYLOAD_TOO_LARGE);
1937
- await drainUpload(req, received, drainDeadlineMs);
1940
+ await drainUpload(req, pump.received(), drainDeadlineMs);
1938
1941
  return;
1939
1942
  }
1940
1943
  const contentType = upstream.headers.get('content-type') ?? undefined;
@@ -1949,16 +1952,16 @@ export function createRelayHandler(options) {
1949
1952
  // cap verdict outranks it: the abort the pump sent INTO the dispatch
1950
1953
  // surfaces here as a throw, and the client still gets its 413
1951
1954
  // (before the tail drain, like every oversize answer).
1952
- if (tooLarge) {
1955
+ if (pump.tooLarge()) {
1953
1956
  res.setHeader('Connection', 'close');
1954
1957
  responseJson(res, 413, PAYLOAD_TOO_LARGE);
1955
- await drainUpload(req, received, drainDeadlineMs);
1958
+ await drainUpload(req, pump.received(), drainDeadlineMs);
1956
1959
  return;
1957
1960
  }
1958
1961
  responseJson(res, 502, { ok: false, error: { code: 'internal' } });
1959
1962
  }
1960
1963
  finally {
1961
- res.off('close', onClientGone);
1964
+ pump.detach();
1962
1965
  // The upload is over — answered, refused mid-flight, or its client
1963
1966
  // gone: the budget slot goes back (T51-fix).
1964
1967
  const remaining = (uploadsByDevice.get(device) ?? 1) - 1;