clawconnect-agent 0.1.7 → 0.1.9

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 (199) hide show
  1. package/README.md +70 -30
  2. package/README.zh-CN.md +70 -30
  3. package/dist/commands/pair.d.ts +4 -0
  4. package/dist/commands/pair.js +63 -6
  5. package/dist/commands/pair.js.map +1 -1
  6. package/dist/commands/run.js +1 -1
  7. package/dist/commands/run.js.map +1 -1
  8. package/dist/commands/send-file.d.ts +2 -25
  9. package/dist/commands/send-file.js +22 -455
  10. package/dist/commands/send-file.js.map +1 -1
  11. package/dist/core/command-types.d.ts +18 -0
  12. package/dist/core/command-types.js +2 -0
  13. package/dist/core/command-types.js.map +1 -0
  14. package/dist/core/relay/attachment-staging.js.map +1 -0
  15. package/dist/{relay → core/relay}/chat-payload.js +17 -3
  16. package/dist/core/relay/chat-payload.js.map +1 -0
  17. package/dist/{commands/send-file-utils.js → core/relay/file-upload-utils.js} +1 -1
  18. package/dist/core/relay/file-upload-utils.js.map +1 -0
  19. package/dist/core/relay/file-upload.d.ts +40 -0
  20. package/dist/core/relay/file-upload.js +401 -0
  21. package/dist/core/relay/file-upload.js.map +1 -0
  22. package/dist/core/relay/mobile-chat-run-bridge.d.ts +201 -0
  23. package/dist/core/relay/mobile-chat-run-bridge.js +192 -0
  24. package/dist/core/relay/mobile-chat-run-bridge.js.map +1 -0
  25. package/dist/core/relay/office-payload.js.map +1 -0
  26. package/dist/core/relay/reconnect.js.map +1 -0
  27. package/dist/core/relay/relay-server-connection.d.ts +6 -0
  28. package/dist/core/relay/relay-server-connection.js +32 -0
  29. package/dist/core/relay/relay-server-connection.js.map +1 -0
  30. package/dist/{relay/slash-command-catalog.d.ts → core/relay/slash-command-types.d.ts} +0 -1
  31. package/dist/core/relay/slash-command-types.js +2 -0
  32. package/dist/core/relay/slash-command-types.js.map +1 -0
  33. package/dist/core/relay/timeline-event-builder.d.ts +86 -0
  34. package/dist/core/relay/timeline-event-builder.js +199 -0
  35. package/dist/core/relay/timeline-event-builder.js.map +1 -0
  36. package/dist/core/relay/timeline-event-log.d.ts +81 -0
  37. package/dist/core/relay/timeline-event-log.js +254 -0
  38. package/dist/core/relay/timeline-event-log.js.map +1 -0
  39. package/dist/{relay → core/relay}/voice-input.js +5 -3
  40. package/dist/core/relay/voice-input.js.map +1 -0
  41. package/dist/hermes/hermes-relay-manager.d.ts +14 -4
  42. package/dist/hermes/hermes-relay-manager.js +159 -41
  43. package/dist/hermes/hermes-relay-manager.js.map +1 -1
  44. package/dist/hermes/hermes-runtime.d.ts +9 -8
  45. package/dist/hermes/hermes-runtime.js +8 -7
  46. package/dist/hermes/hermes-runtime.js.map +1 -1
  47. package/dist/hermes/hermes-session-store.js +52 -30
  48. package/dist/hermes/hermes-session-store.js.map +1 -1
  49. package/dist/hermes/hermes-voice-input.js +1 -1
  50. package/dist/hermes/hermes-voice-input.js.map +1 -1
  51. package/dist/hermes/runtime/hermes-runtime-artifacts.js.map +1 -0
  52. package/dist/hermes/{models → runtime}/hermes-runtime-backups.d.ts +1 -1
  53. package/dist/hermes/runtime/hermes-runtime-backups.js.map +1 -0
  54. package/dist/hermes/{models → runtime}/hermes-runtime-chat.d.ts +2 -1
  55. package/dist/hermes/{models → runtime}/hermes-runtime-chat.js +127 -27
  56. package/dist/hermes/runtime/hermes-runtime-chat.js.map +1 -0
  57. package/dist/hermes/{models → runtime}/hermes-runtime-command-router.d.ts +1 -1
  58. package/dist/hermes/{models → runtime}/hermes-runtime-command-router.js +3 -0
  59. package/dist/hermes/runtime/hermes-runtime-command-router.js.map +1 -0
  60. package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.d.ts +1 -1
  61. package/dist/hermes/runtime/hermes-runtime-command-utils.js.map +1 -0
  62. package/dist/hermes/{models → runtime}/hermes-runtime-cron.d.ts +1 -1
  63. package/dist/hermes/runtime/hermes-runtime-cron.js.map +1 -0
  64. package/dist/hermes/runtime/hermes-runtime-history.d.ts +2 -0
  65. package/dist/hermes/runtime/hermes-runtime-history.js +249 -0
  66. package/dist/hermes/runtime/hermes-runtime-history.js.map +1 -0
  67. package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.d.ts +1 -1
  68. package/dist/hermes/runtime/hermes-runtime-lifecycle.js.map +1 -0
  69. package/dist/hermes/{models → runtime}/hermes-runtime-models.d.ts +1 -1
  70. package/dist/hermes/runtime/hermes-runtime-models.js.map +1 -0
  71. package/dist/hermes/{models → runtime}/hermes-runtime-process.d.ts +2 -0
  72. package/dist/hermes/{models → runtime}/hermes-runtime-process.js +19 -2
  73. package/dist/hermes/runtime/hermes-runtime-process.js.map +1 -0
  74. package/dist/hermes/{models → runtime}/hermes-runtime-sessions.d.ts +1 -1
  75. package/dist/hermes/{models → runtime}/hermes-runtime-sessions.js +26 -9
  76. package/dist/hermes/runtime/hermes-runtime-sessions.js.map +1 -0
  77. package/dist/hermes/{models → runtime}/hermes-runtime-skills.d.ts +1 -1
  78. package/dist/hermes/runtime/hermes-runtime-skills.js.map +1 -0
  79. package/dist/hermes/runtime/hermes-runtime-types.js.map +1 -0
  80. package/dist/hermes/runtime/hermes-runtime-usage.js.map +1 -0
  81. package/dist/hermes/runtime/hermes-runtime-values.js.map +1 -0
  82. package/dist/index.js +28 -3
  83. package/dist/index.js.map +1 -1
  84. package/dist/openclaw/backups/backup-manager.js.map +1 -0
  85. package/dist/{commands → openclaw/config}/provider-config.js +1 -1
  86. package/dist/openclaw/config/provider-config.js.map +1 -0
  87. package/dist/openclaw/config/provider-registry.js.map +1 -0
  88. package/dist/openclaw/gateway-client.js.map +1 -0
  89. package/dist/{commands → openclaw/handlers}/local-handlers.d.ts +1 -1
  90. package/dist/{commands → openclaw/handlers}/local-handlers.js +2 -2
  91. package/dist/openclaw/handlers/local-handlers.js.map +1 -0
  92. package/dist/{commands → openclaw/handlers}/provider-handlers.d.ts +1 -1
  93. package/dist/{commands → openclaw/handlers}/provider-handlers.js +3 -3
  94. package/dist/openclaw/handlers/provider-handlers.js.map +1 -0
  95. package/dist/openclaw/relay/chat-history.d.ts +51 -0
  96. package/dist/openclaw/relay/chat-history.js +347 -0
  97. package/dist/openclaw/relay/chat-history.js.map +1 -0
  98. package/dist/{relay → openclaw/relay}/chat-send-attachments.js +12 -1
  99. package/dist/openclaw/relay/chat-send-attachments.js.map +1 -0
  100. package/dist/{relay → openclaw/relay}/openclaw-voice-input.js +1 -1
  101. package/dist/openclaw/relay/openclaw-voice-input.js.map +1 -0
  102. package/dist/openclaw/relay/outgoing-media-relay.d.ts +11 -0
  103. package/dist/openclaw/relay/outgoing-media-relay.js +120 -0
  104. package/dist/openclaw/relay/outgoing-media-relay.js.map +1 -0
  105. package/dist/{relay → openclaw/relay}/session-context.d.ts +6 -0
  106. package/dist/{relay → openclaw/relay}/session-context.js +42 -2
  107. package/dist/openclaw/relay/session-context.js.map +1 -0
  108. package/dist/openclaw/relay/slash-command-catalog.d.ts +2 -0
  109. package/dist/openclaw/relay/slash-command-catalog.generated.js.map +1 -0
  110. package/dist/openclaw/relay/slash-command-catalog.js.map +1 -0
  111. package/dist/openclaw/relay/transcript-dedupe.d.ts +21 -0
  112. package/dist/openclaw/relay/transcript-dedupe.js +211 -0
  113. package/dist/openclaw/relay/transcript-dedupe.js.map +1 -0
  114. package/dist/{relay → openclaw}/relay-manager.d.ts +1 -1
  115. package/dist/{relay → openclaw}/relay-manager.js +373 -99
  116. package/dist/openclaw/relay-manager.js.map +1 -0
  117. package/dist/{commands → openclaw/runtime}/local-runtime.d.ts +1 -17
  118. package/dist/openclaw/runtime/local-runtime.js.map +1 -0
  119. package/dist/openclaw/session-store.d.ts +1 -0
  120. package/dist/openclaw/session-store.js +70 -0
  121. package/dist/openclaw/session-store.js.map +1 -0
  122. package/dist/runtime-adapters.js +1 -1
  123. package/dist/runtime-adapters.js.map +1 -1
  124. package/package.json +2 -2
  125. package/dist/commands/backup-manager.js.map +0 -1
  126. package/dist/commands/local-handlers.js.map +0 -1
  127. package/dist/commands/local-runtime.js.map +0 -1
  128. package/dist/commands/provider-config.js.map +0 -1
  129. package/dist/commands/provider-handlers.js.map +0 -1
  130. package/dist/commands/provider-registry.js.map +0 -1
  131. package/dist/commands/send-file-utils.js.map +0 -1
  132. package/dist/hermes/models/hermes-runtime-artifacts.js.map +0 -1
  133. package/dist/hermes/models/hermes-runtime-backups.js.map +0 -1
  134. package/dist/hermes/models/hermes-runtime-chat.js.map +0 -1
  135. package/dist/hermes/models/hermes-runtime-command-router.js.map +0 -1
  136. package/dist/hermes/models/hermes-runtime-command-utils.js.map +0 -1
  137. package/dist/hermes/models/hermes-runtime-cron.js.map +0 -1
  138. package/dist/hermes/models/hermes-runtime-lifecycle.js.map +0 -1
  139. package/dist/hermes/models/hermes-runtime-models.js.map +0 -1
  140. package/dist/hermes/models/hermes-runtime-process.js.map +0 -1
  141. package/dist/hermes/models/hermes-runtime-sessions.js.map +0 -1
  142. package/dist/hermes/models/hermes-runtime-skills.js.map +0 -1
  143. package/dist/hermes/models/hermes-runtime-types.js.map +0 -1
  144. package/dist/hermes/models/hermes-runtime-usage.js.map +0 -1
  145. package/dist/hermes/models/hermes-runtime-values.js.map +0 -1
  146. package/dist/relay/attachment-staging.js.map +0 -1
  147. package/dist/relay/chat-history.d.ts +0 -29
  148. package/dist/relay/chat-history.js +0 -87
  149. package/dist/relay/chat-history.js.map +0 -1
  150. package/dist/relay/chat-payload.js.map +0 -1
  151. package/dist/relay/chat-send-attachments.js.map +0 -1
  152. package/dist/relay/gateway-client.js.map +0 -1
  153. package/dist/relay/mobile-chat-run-bridge.d.ts +0 -93
  154. package/dist/relay/mobile-chat-run-bridge.js +0 -68
  155. package/dist/relay/mobile-chat-run-bridge.js.map +0 -1
  156. package/dist/relay/office-payload.js.map +0 -1
  157. package/dist/relay/openclaw-voice-input.js.map +0 -1
  158. package/dist/relay/reconnect.js.map +0 -1
  159. package/dist/relay/relay-manager.js.map +0 -1
  160. package/dist/relay/session-context.js.map +0 -1
  161. package/dist/relay/slash-command-catalog.generated.js.map +0 -1
  162. package/dist/relay/slash-command-catalog.js.map +0 -1
  163. package/dist/relay/voice-input.js.map +0 -1
  164. /package/dist/{relay → core/relay}/attachment-staging.d.ts +0 -0
  165. /package/dist/{relay → core/relay}/attachment-staging.js +0 -0
  166. /package/dist/{relay → core/relay}/chat-payload.d.ts +0 -0
  167. /package/dist/{commands/send-file-utils.d.ts → core/relay/file-upload-utils.d.ts} +0 -0
  168. /package/dist/{relay → core/relay}/office-payload.d.ts +0 -0
  169. /package/dist/{relay → core/relay}/office-payload.js +0 -0
  170. /package/dist/{relay → core/relay}/reconnect.d.ts +0 -0
  171. /package/dist/{relay → core/relay}/reconnect.js +0 -0
  172. /package/dist/{relay → core/relay}/voice-input.d.ts +0 -0
  173. /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.d.ts +0 -0
  174. /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.js +0 -0
  175. /package/dist/hermes/{models → runtime}/hermes-runtime-backups.js +0 -0
  176. /package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.js +0 -0
  177. /package/dist/hermes/{models → runtime}/hermes-runtime-cron.js +0 -0
  178. /package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.js +0 -0
  179. /package/dist/hermes/{models → runtime}/hermes-runtime-models.js +0 -0
  180. /package/dist/hermes/{models → runtime}/hermes-runtime-skills.js +0 -0
  181. /package/dist/hermes/{models → runtime}/hermes-runtime-types.d.ts +0 -0
  182. /package/dist/hermes/{models → runtime}/hermes-runtime-types.js +0 -0
  183. /package/dist/hermes/{models → runtime}/hermes-runtime-usage.d.ts +0 -0
  184. /package/dist/hermes/{models → runtime}/hermes-runtime-usage.js +0 -0
  185. /package/dist/hermes/{models → runtime}/hermes-runtime-values.d.ts +0 -0
  186. /package/dist/hermes/{models → runtime}/hermes-runtime-values.js +0 -0
  187. /package/dist/{commands → openclaw/backups}/backup-manager.d.ts +0 -0
  188. /package/dist/{commands → openclaw/backups}/backup-manager.js +0 -0
  189. /package/dist/{commands → openclaw/config}/provider-config.d.ts +0 -0
  190. /package/dist/{commands → openclaw/config}/provider-registry.d.ts +0 -0
  191. /package/dist/{commands → openclaw/config}/provider-registry.js +0 -0
  192. /package/dist/{relay → openclaw}/gateway-client.d.ts +0 -0
  193. /package/dist/{relay → openclaw}/gateway-client.js +0 -0
  194. /package/dist/{relay → openclaw/relay}/chat-send-attachments.d.ts +0 -0
  195. /package/dist/{relay → openclaw/relay}/openclaw-voice-input.d.ts +0 -0
  196. /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.d.ts +0 -0
  197. /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.js +0 -0
  198. /package/dist/{relay → openclaw/relay}/slash-command-catalog.js +0 -0
  199. /package/dist/{commands → openclaw/runtime}/local-runtime.js +0 -0
package/README.md CHANGED
@@ -78,6 +78,14 @@ clawconnect pair \
78
78
 
79
79
  After each command, scan the QR code in the mobile app or enter the printed access code. The pairing payload includes `gatewayType`, and the relay rejects mismatched pairing attempts so an OpenClaw mobile gateway cannot bind to a Hermes Agent host, or the reverse.
80
80
 
81
+ Install paired background service(s) once after pairing:
82
+
83
+ ```bash
84
+ clawconnect install
85
+ ```
86
+
87
+ Without `--profile`, `clawconnect install` installs every paired profile it finds. To target one profile explicitly, use `clawconnect install-openclaw`, `clawconnect install-hermes`, or `clawconnect install --profile <name>`.
88
+
81
89
  Check both instances:
82
90
 
83
91
  ```bash
@@ -123,7 +131,8 @@ Supported values:
123
131
  - `CLAWCONNECT_GATEWAY_URL` — optional local Gateway websocket URL override
124
132
  - `CLAWCONNECT_ENV_FILE` — optional explicit env file path. When unset, the agent reads `~/.clawconnect/.env`, then `.env.local`, then `.env`
125
133
  - `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` — Gateway auth fallback
126
- - `OPENCLAW_ASR_COMMAND` — host-side speech-to-text command for ClawLink `chat.voice.send` messages. The agent saves the audio to a temporary file and runs this command; it must print the transcript to stdout. Placeholders: `{file}`, `{language}`, `{mimeType}`
134
+ - `CLAWCONNECT_ASR_COMMAND` — host-side speech-to-text command for ClawLink `chat.voice.send` messages. The agent saves the audio to a temporary file and runs this command; it must print the transcript to stdout. Placeholders: `{file}`, `{language}`, `{mimeType}`
135
+ - `OPENCLAW_ASR_COMMAND` — legacy speech-to-text command fallback. `CLAWCONNECT_ASR_COMMAND` takes precedence when both are set.
127
136
 
128
137
  Shell environment variables take priority over env files. Existing pairing credentials in `~/.clawconnect/config.json` or `~/.clawconnect/profiles/<profile>/config.json` still take priority for `clawconnect run`, `status`, and `send-file`; run `clawconnect pair --profile <name> --server <url>` or `clawconnect reset --profile <name>` when you intentionally switch relay servers.
129
138
 
@@ -138,10 +147,10 @@ clawconnect run
138
147
  Optional: let ClawLink send raw voice messages and have the host transcribe them before forwarding text to OpenClaw or Hermes Agent:
139
148
 
140
149
  ```bash
141
- OPENCLAW_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
150
+ CLAWCONNECT_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
142
151
  ```
143
152
 
144
- If `OPENCLAW_ASR_COMMAND` is not configured, voice messages fail with `voice_asr_not_configured`.
153
+ If neither `CLAWCONNECT_ASR_COMMAND` nor legacy `OPENCLAW_ASR_COMMAND` is configured, voice messages fail with `voice_asr_not_configured`.
145
154
 
146
155
  ### Check Status
147
156
 
@@ -264,34 +273,58 @@ clawconnect-agent/
264
273
  status.ts
265
274
  install.ts
266
275
  set-token.ts
267
- local-handlers.ts
268
- local-runtime.ts
269
- provider-handlers.ts
270
- provider-config.ts
271
- provider-registry.ts
272
- backup-manager.ts
273
- send-file-utils.ts
274
276
  *.test.ts
277
+ core/
278
+ command-types.ts
279
+ relay/
280
+ file-upload.ts
281
+ file-upload-utils.ts
282
+ relay-server-connection.ts
283
+ reconnect.ts
284
+ office-payload.ts
285
+ mobile-chat-run-bridge.ts
286
+ voice-input.ts
287
+ attachment-staging.ts
288
+ chat-payload.ts
289
+ slash-command-types.ts
275
290
  config/
276
291
  config.ts
277
292
  env.ts
293
+ hermes/
294
+ hermes-relay-manager.ts
295
+ hermes-runtime.ts
296
+ hermes-session-store.ts
297
+ hermes-voice-input.ts
298
+ runtime/
299
+ hermes-runtime-*.ts
278
300
  i18n/
279
301
  index.ts
302
+ openclaw/
303
+ relay-manager.ts
304
+ gateway-client.ts
305
+ session-store.ts
306
+ runtime/
307
+ local-runtime.ts
308
+ handlers/
309
+ local-handlers.ts
310
+ provider-handlers.ts
311
+ config/
312
+ provider-config.ts
313
+ provider-registry.ts
314
+ backups/
315
+ backup-manager.ts
316
+ relay/
317
+ session-context.ts
318
+ chat-history.ts
319
+ chat-send-attachments.ts
320
+ openclaw-voice-input.ts
321
+ slash-command-catalog.ts
322
+ slash-command-catalog.generated.ts
280
323
  platform/
281
324
  service-manager.ts
282
325
  service-manager-common.ts
283
326
  service-manager-linux.ts
284
327
  *.test.ts
285
- relay/
286
- gateway-client.ts
287
- relay-manager.ts
288
- session-context.ts
289
- chat-payload.ts
290
- chat-history.ts
291
- attachment-staging.ts
292
- chat-send-attachments.ts
293
- reconnect.ts
294
- *.test.ts
295
328
  ```
296
329
 
297
330
  Tests are colocated with the source as `*.test.ts`. They run with `npm test`, and the build/publish flow excludes them from the package tarball.
@@ -301,18 +334,23 @@ Tests are colocated with the source as `*.test.ts`. They run with `npm test`, an
301
334
  - `src/index.ts` is the CLI entrypoint. It wires every command together and handles top-level errors.
302
335
  - `src/commands/pair.ts` registers a host, saves relay config, and installs the background service after pairing.
303
336
  - `src/commands/run.ts` starts the relay loop in the foreground for service-managed or debug runs.
304
- - `src/commands/send-file.ts` uploads local files or images into the paired chat session.
337
+ - `src/commands/send-file.ts` is the CLI wrapper for uploading local files or images into the paired chat session.
305
338
  - `src/commands/install.ts` manages service install, restart, stop, uninstall, and reset flows.
306
339
  - `src/commands/set-token.ts` stores a local Gateway token when token auth is required.
307
- - `src/commands/local-handlers.ts` handles legacy command prefixes and local maintenance actions such as backup, restore, logs, doctor, and gateway restart.
308
- - `src/commands/local-runtime.ts` resolves the `openclaw` binary and triggers gateway lifecycle actions.
309
- - `src/commands/provider-handlers.ts` routes provider-specific commands and reuses the same gateway restart path.
340
+ - `src/core/relay/file-upload.ts` contains the programmatic relay file upload client used by both CLI and Hermes artifact delivery.
341
+ - `src/core/relay/relay-server-connection.ts` contains shared relay URL, JSON frame, abort, and retry-close helpers.
342
+ - `src/core/relay/office-payload.ts`, `mobile-chat-run-bridge.ts`, `voice-input.ts`, `attachment-staging.ts`, and `chat-payload.ts` are gateway-neutral relay utilities.
343
+ - `src/openclaw/handlers/local-handlers.ts` handles legacy command prefixes and local maintenance actions such as backup, restore, logs, doctor, and gateway restart.
344
+ - `src/openclaw/runtime/local-runtime.ts` resolves the `openclaw` binary and triggers gateway lifecycle actions.
345
+ - `src/openclaw/handlers/provider-handlers.ts` routes provider-specific commands and reuses the same gateway restart path.
346
+ - `src/openclaw/relay-manager.ts` bridges the relay server and the local OpenClaw Gateway, dispatches commands, and handles chat/history fallbacks.
347
+ - `src/openclaw/gateway-client.ts` manages the websocket connection to OpenClaw Gateway and device authentication.
348
+ - `src/openclaw/relay/session-context.ts` reads session defaults and context usage snapshots.
349
+ - `src/openclaw/relay/chat-history.ts` and `chat-send-attachments.ts` handle OpenClaw-specific history fallback and attachment staging for `chat.send`.
350
+ - `src/hermes/hermes-relay-manager.ts` bridges Hermes runtime commands to the relay server.
351
+ - `src/hermes/runtime/` contains Hermes CLI/Python execution modules for chat, cron, skills, models, sessions, usage, and lifecycle operations.
310
352
  - `src/config/env.ts` loads `.env` files and exposes agent defaults such as relay and Gateway URLs.
311
353
  - `src/platform/service-manager.ts` exposes a cross-platform service facade for macOS, Linux, and Windows.
312
- - `src/relay/relay-manager.ts` bridges the relay server and the local Gateway, dispatches commands, and handles chat/history fallbacks.
313
- - `src/relay/gateway-client.ts` manages the websocket connection to OpenClaw Gateway and device authentication.
314
- - `src/relay/session-context.ts` reads session defaults and context usage snapshots.
315
- - `src/relay/chat-payload.ts`, `src/relay/chat-history.ts`, `src/relay/attachment-staging.ts`, and `src/relay/chat-send-attachments.ts` handle chat normalization, fallback, and attachment staging.
316
354
  - `src/config/config.ts` reads and writes local pairing config under `~/.clawconnect`.
317
355
  - `src/i18n/index.ts` contains the localized CLI strings.
318
356
 
@@ -320,15 +358,17 @@ Tests are colocated with the source as `*.test.ts`. They run with `npm test`, an
320
358
 
321
359
  - `pairCommand()` registers a host, generates the pairing payload, and persists relay config.
322
360
  - `runCommand()` starts the foreground relay client loop used by the background service.
323
- - `sendFileCommand()` stages a local file and uploads it into the paired chat session.
361
+ - `sendFileCommand()` handles CLI config/session defaults and delegates uploads to `uploadFileToRelay()`.
362
+ - `uploadFileToRelay()` uploads a file to the relay using explicit relay URL, secret, gateway ID, and session key.
324
363
  - `installCommand()`, `restartCommand()`, `stopCommand()`, `uninstallCommand()`, and `resetCommand()` manage the service lifecycle.
325
364
  - `statusCommand()` prints pairing config, gateway state, and service health.
326
365
  - `setTokenCommand()` stores the local OpenClaw Gateway token.
327
- - `handleLocalCommand()` and `handleProviderCommand()` process local control-plane commands before forwarding to the gateway.
366
+ - `handleLocalCommand()` and `handleProviderCommand()` process OpenClaw local control-plane commands before forwarding to the gateway.
328
367
  - `OpenClawGatewayClient` manages the gateway websocket, reconnects, and request/response frames.
329
368
  - `canonicalizeRelayParams()`, `extractGatewaySessionDefaults()`, and `buildContextUsageFingerprint()` normalize relay protocol payloads.
330
369
  - `normalizeChatEventPayload()`, `extractChatText()`, `extractHistoryOutcome()`, and `withMessageText()` keep chat payloads stable across relay and gateway responses.
331
370
  - `buildAttachmentStagingPath()` and `resolveAttachmentFileName()` manage file staging for attachments.
371
+ - `buildRelayUrl()`, `sendRelayJson()`, `parseRelayFrame()`, and `shouldRetryRelayClose()` share narrow relay transport behavior across OpenClaw and Hermes.
332
372
  - `getServiceStatus()`, `installService()`, `restartService()`, `stopService()`, and `uninstallService()` implement platform-specific service control.
333
373
 
334
374
  ## How It Works
package/README.zh-CN.md CHANGED
@@ -85,6 +85,14 @@ clawconnect pair \
85
85
 
86
86
  每条命令执行后,使用移动端扫码,或在移动端输入终端打印的配对码。配对 payload 会带上 `gatewayType`,Relay 会校验手机端请求的类型和主机注册的类型是否一致;类型不一致会拒绝绑定,避免 OpenClaw 手机网关绑定到 Hermes Agent 主机,或反过来绑定错误。
87
87
 
88
+ 配对完成后,安装已配对的后台服务:
89
+
90
+ ```bash
91
+ clawconnect install
92
+ ```
93
+
94
+ 不带 `--profile` 时,`clawconnect install` 会安装当前能找到的所有已配对 profile。只想指定一个 profile 时,可以用 `clawconnect install-openclaw`、`clawconnect install-hermes`,或 `clawconnect install --profile <name>`。
95
+
88
96
  查看两个实例:
89
97
 
90
98
  ```bash
@@ -130,7 +138,8 @@ $EDITOR ~/.clawconnect/.env
130
138
  - `CLAWCONNECT_GATEWAY_URL`:可选,本机 OpenClaw Gateway WebSocket 地址覆盖值
131
139
  - `CLAWCONNECT_ENV_FILE`:可选,显式指定 env 文件路径;未设置时会依次读取 `~/.clawconnect/.env`、`.env.local`、`.env`
132
140
  - `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`:Gateway 鉴权兜底值
133
- - `OPENCLAW_ASR_COMMAND`:宿主机语音转文字命令。ClawLink 发送 `chat.voice.send` 后,agent 会把音频保存到临时文件,并执行这个命令;命令必须把识别文本输出到 stdout。可用占位符:`{file}`、`{language}`、`{mimeType}`
141
+ - `CLAWCONNECT_ASR_COMMAND`:宿主机语音转文字命令。ClawLink 发送 `chat.voice.send` 后,agent 会把音频保存到临时文件,并执行这个命令;命令必须把识别文本输出到 stdout。可用占位符:`{file}`、`{language}`、`{mimeType}`
142
+ - `OPENCLAW_ASR_COMMAND`:旧版语音转文字命令兜底值;同时设置时优先使用 `CLAWCONNECT_ASR_COMMAND`
134
143
 
135
144
  Shell 里已经设置的环境变量优先级高于 env 文件。`clawconnect run`、`status`、`send-file` 会继续使用 `~/.clawconnect/config.json` 或 `~/.clawconnect/profiles/<profile>/config.json` 里已配对保存的 relay;如果要切换中继服务器,请执行 `clawconnect pair --profile <name> --server <url>` 或 `clawconnect reset --profile <name>`。
136
145
 
@@ -147,10 +156,10 @@ clawconnect run
147
156
  如果需要让手机端直接发送语音、由宿主机识别后再转发给 OpenClaw 或 Hermes Agent,请配置本机 ASR 命令:
148
157
 
149
158
  ```bash
150
- OPENCLAW_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
159
+ CLAWCONNECT_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
151
160
  ```
152
161
 
153
- 未配置 `OPENCLAW_ASR_COMMAND` 时,宿主机收到语音消息会返回 `voice_asr_not_configured`。
162
+ 未配置 `CLAWCONNECT_ASR_COMMAND`,且也没有旧版 `OPENCLAW_ASR_COMMAND` 兜底时,宿主机收到语音消息会返回 `voice_asr_not_configured`。
154
163
 
155
164
  ### 4. 查看状态
156
165
 
@@ -279,34 +288,58 @@ clawconnect-agent/
279
288
  status.ts 查看配对与服务状态
280
289
  install.ts install / restart / stop / uninstall / reset
281
290
  set-token.ts 手动保存 Gateway Token
282
- local-handlers.ts 兼容旧命令前缀和本地维护命令
283
- local-runtime.ts 解析 OpenClaw 可执行文件并触发网关生命周期
284
- provider-handlers.ts provider 命令分发和网关重启
285
- provider-config.ts provider 配置读写
286
- provider-registry.ts provider 注册信息
287
- backup-manager.ts 本地配置备份管理
288
- send-file-utils.ts relay 地址和文件传输辅助
289
291
  *.test.ts 紧邻源码的单元测试
292
+ core/
293
+ command-types.ts 共享本地命令结果和上下文类型
294
+ relay/
295
+ file-upload.ts 纯 relay 文件上传服务
296
+ file-upload-utils.ts relay 地址和文件传输辅助
297
+ relay-server-connection.ts relay URL、JSON 帧、abort 和 close retry 辅助
298
+ reconnect.ts 重连策略
299
+ office-payload.ts office/status payload 构造
300
+ mobile-chat-run-bridge.ts 移动端 chat run payload 转换
301
+ voice-input.ts 共享语音输入 / ASR 参数处理
302
+ attachment-staging.ts 附件 MIME 和暂存路径辅助
303
+ chat-payload.ts 聊天 payload 归一化
304
+ slash-command-types.ts slash command 共享类型
290
305
  config/
291
306
  config.ts 配对配置读写
292
307
  env.ts env 文件加载和 agent 默认配置
308
+ hermes/
309
+ hermes-relay-manager.ts Hermes relay 桥接
310
+ hermes-runtime.ts Hermes runtime 聚合入口
311
+ hermes-session-store.ts Hermes 会话别名存储
312
+ hermes-voice-input.ts Hermes 语音输入适配
313
+ runtime/
314
+ hermes-runtime-*.ts Hermes CLI/Python、chat、cron、skills、models、usage 等执行模块
293
315
  i18n/
294
316
  index.ts CLI 文案
317
+ openclaw/
318
+ relay-manager.ts OpenClaw 中继服务器桥接与命令分发
319
+ gateway-client.ts 连接并认证本地 OpenClaw Gateway
320
+ session-store.ts OpenClaw 最新会话推断
321
+ runtime/
322
+ local-runtime.ts 解析 OpenClaw 可执行文件并触发网关生命周期
323
+ handlers/
324
+ local-handlers.ts 兼容旧命令前缀和本地维护命令
325
+ provider-handlers.ts provider 命令分发和网关重启
326
+ config/
327
+ provider-config.ts provider 配置读写
328
+ provider-registry.ts provider 注册信息
329
+ backups/
330
+ backup-manager.ts 本地配置备份管理
331
+ relay/
332
+ session-context.ts 会话默认值和上下文使用量快照
333
+ chat-history.ts 历史消息回退
334
+ chat-send-attachments.ts 发送带附件消息的参数准备
335
+ openclaw-voice-input.ts OpenClaw 语音命令适配
336
+ slash-command-catalog.ts OpenClaw slash command 目录
337
+ slash-command-catalog.generated.ts 生成的 OpenClaw slash command 目录
295
338
  platform/
296
339
  service-manager.ts 跨平台服务入口
297
340
  service-manager-common.ts 通用平台辅助常量
298
341
  service-manager-linux.ts Linux systemd/nohup 逻辑
299
342
  *.test.ts 平台层单元测试
300
- relay/
301
- gateway-client.ts 连接并认证本地 OpenClaw Gateway
302
- relay-manager.ts 中继服务器桥接与命令分发
303
- session-context.ts 会话默认值和上下文使用量快照
304
- chat-payload.ts 聊天 payload 归一化
305
- chat-history.ts 历史消息回退
306
- attachment-staging.ts 附件本地落盘
307
- chat-send-attachments.ts 发送带附件消息的参数准备
308
- reconnect.ts 重连策略
309
- *.test.ts relay 层单元测试
310
343
  ```
311
344
 
312
345
  测试文件和源码采用邻近放置的方式,统一以 `*.test.ts` 命名。它们会被 `npm test` 执行,但不会进入发布包。
@@ -316,18 +349,23 @@ clawconnect-agent/
316
349
  - `src/index.ts` 是 CLI 入口,负责命令注册和顶层错误处理。
317
350
  - `src/commands/pair.ts` 负责主机配对、保存 relay 配置,并在配对后安装后台服务。
318
351
  - `src/commands/run.ts` 负责前台启动 relay 循环,供服务管理或调试使用。
319
- - `src/commands/send-file.ts` 负责把本地文件或图片上传到已配对的聊天会话。
352
+ - `src/commands/send-file.ts` 是发送本地文件或图片到已配对聊天会话的 CLI wrapper。
320
353
  - `src/commands/install.ts` 负责后台服务的安装、重启、停止、卸载和重置。
321
354
  - `src/commands/set-token.ts` 负责在需要 token 鉴权时保存本地 Gateway Token。
322
- - `src/commands/local-handlers.ts` 负责兼容旧命令前缀,以及备份、恢复、日志、doctor、gateway 重启等本地维护命令。
323
- - `src/commands/local-runtime.ts` 负责解析 `openclaw` 可执行文件并触发网关生命周期动作。
324
- - `src/commands/provider-handlers.ts` 负责 provider 专属命令分发,并复用同一套 gateway 重启逻辑。
355
+ - `src/core/relay/file-upload.ts` 是纯程序化 relay 文件上传服务,供 CLI 和 Hermes artifact delivery 复用。
356
+ - `src/core/relay/relay-server-connection.ts` 提供共享 relay URL、JSON 帧、abort close 和 close retry 判断。
357
+ - `src/core/relay/office-payload.ts`、`mobile-chat-run-bridge.ts`、`voice-input.ts`、`attachment-staging.ts`、`chat-payload.ts` 是 gateway-neutral 的 relay 工具。
358
+ - `src/openclaw/handlers/local-handlers.ts` 负责兼容旧命令前缀,以及备份、恢复、日志、doctor、gateway 重启等本地维护命令。
359
+ - `src/openclaw/runtime/local-runtime.ts` 负责解析 `openclaw` 可执行文件并触发网关生命周期动作。
360
+ - `src/openclaw/handlers/provider-handlers.ts` 负责 provider 专属命令分发,并复用同一套 gateway 重启逻辑。
361
+ - `src/openclaw/relay-manager.ts` 负责中继服务器与本地 OpenClaw Gateway 的桥接、命令分发,以及 chat/history 回退处理。
362
+ - `src/openclaw/gateway-client.ts` 负责连接 OpenClaw Gateway,并处理设备身份认证。
363
+ - `src/openclaw/relay/session-context.ts` 负责读取会话默认值和上下文使用量快照。
364
+ - `src/openclaw/relay/chat-history.ts`、`chat-send-attachments.ts` 负责 OpenClaw 专属历史回退和 `chat.send` 附件暂存。
365
+ - `src/hermes/hermes-relay-manager.ts` 负责 Hermes runtime 与 relay server 的桥接。
366
+ - `src/hermes/runtime/` 放置 Hermes CLI/Python、chat、cron、skills、models、sessions、usage 和 lifecycle 等执行模块。
325
367
  - `src/config/env.ts` 负责加载 `.env` 文件,并集中维护 relay、Gateway 等 agent 默认配置。
326
368
  - `src/platform/service-manager.ts` 负责 macOS、Linux 和 Windows 的跨平台服务管理入口。
327
- - `src/relay/relay-manager.ts` 负责中继服务器与本地 Gateway 的桥接、命令分发,以及 chat/history 回退处理。
328
- - `src/relay/gateway-client.ts` 负责连接 OpenClaw Gateway,并处理设备身份认证。
329
- - `src/relay/session-context.ts` 负责读取会话默认值和上下文使用量快照。
330
- - `src/relay/chat-payload.ts`、`src/relay/chat-history.ts`、`src/relay/attachment-staging.ts`、`src/relay/chat-send-attachments.ts` 负责聊天数据归一化、历史回退和附件暂存。
331
369
  - `src/config/config.ts` 负责读写 `~/.clawconnect` 下的本地配对配置。
332
370
  - `src/i18n/index.ts` 负责 CLI 文案。
333
371
 
@@ -335,15 +373,17 @@ clawconnect-agent/
335
373
 
336
374
  - `pairCommand()` 负责主机配对、生成配对 payload,并持久化 relay 配置。
337
375
  - `runCommand()` 负责启动前台 relay 客户端循环,供后台服务使用。
338
- - `sendFileCommand()` 负责暂存本地文件并上传到已配对的聊天会话。
376
+ - `sendFileCommand()` 负责 CLI 配置、会话默认值和输出格式,并委托 `uploadFileToRelay()` 上传。
377
+ - `uploadFileToRelay()` 使用显式 relay URL、secret、gateway ID 和 session key 上传文件。
339
378
  - `installCommand()`、`restartCommand()`、`stopCommand()`、`uninstallCommand()`、`resetCommand()` 负责服务生命周期管理。
340
379
  - `statusCommand()` 负责打印配对配置、Gateway 状态和服务健康信息。
341
380
  - `setTokenCommand()` 负责保存本地 OpenClaw Gateway Token。
342
- - `handleLocalCommand()` 和 `handleProviderCommand()` 负责在转发前处理本地控制平面命令。
381
+ - `handleLocalCommand()` 和 `handleProviderCommand()` 负责在转发前处理 OpenClaw 本地控制平面命令。
343
382
  - `OpenClawGatewayClient` 负责管理 Gateway WebSocket、重连和请求/响应帧。
344
383
  - `canonicalizeRelayParams()`、`extractGatewaySessionDefaults()`、`buildContextUsageFingerprint()` 负责统一 relay 协议 payload。
345
384
  - `normalizeChatEventPayload()`、`extractChatText()`、`extractHistoryOutcome()`、`withMessageText()` 负责稳定聊天事件与历史回退结果。
346
385
  - `buildAttachmentStagingPath()` 和 `resolveAttachmentFileName()` 负责附件暂存路径和文件名处理。
386
+ - `buildRelayUrl()`、`sendRelayJson()`、`parseRelayFrame()`、`shouldRetryRelayClose()` 负责 OpenClaw 和 Hermes 共享的窄 relay transport 行为。
347
387
  - `getServiceStatus()`、`installService()`、`restartService()`、`stopService()`、`uninstallService()` 负责跨平台服务控制。
348
388
 
349
389
  ## 工作原理
@@ -1,3 +1,4 @@
1
+ import { type ClawConnectConfig } from "../config/config.js";
1
2
  interface PairOptions {
2
3
  server?: string;
3
4
  name?: string;
@@ -6,4 +7,7 @@ interface PairOptions {
6
7
  profile?: string;
7
8
  }
8
9
  export declare function pairCommand(opts: PairOptions): Promise<void>;
10
+ export declare function sameRelayServer(left: string, right: string): boolean;
11
+ export declare function shouldReuseExistingPairing(config: ClawConnectConfig | null, gatewayType: "openclaw" | "hermes", requestedRelayServerUrl: string): boolean;
12
+ export declare function normalizeRelayServerIdentity(relayServerUrl: string): string;
9
13
  export {};
@@ -1,11 +1,13 @@
1
- import { configExists, readConfig, writeConfig } from "../config/config.js";
1
+ import { copyFileSync, existsSync } from "fs";
2
+ import { dirname, join } from "path";
3
+ import { configExists, getConfigPath, readConfig, writeConfig } from "../config/config.js";
2
4
  import { installCommand } from "./install.js";
3
5
  import qrcodeTerminal from "qrcode-terminal";
4
6
  import { t } from "../i18n/index.js";
5
7
  import { execSync } from "child_process";
6
8
  import { hostname } from "os";
7
9
  import { getServicePlatform } from "../platform/service-manager.js";
8
- import { toRelayHttpBase } from "./send-file-utils.js";
10
+ import { toRelayHttpBase } from "../core/relay/file-upload-utils.js";
9
11
  import { getDefaultRelayServerUrl } from "../config/env.js";
10
12
  import { gatewayCapabilitiesForType, normalizeGatewayType } from "../gateway-profiles.js";
11
13
  export async function pairCommand(opts) {
@@ -18,9 +20,11 @@ export async function pairCommand(opts) {
18
20
  const capabilities = gatewayCapabilitiesForType(gatewayType);
19
21
  const existingConfig = configExists() ? readConfig() : null;
20
22
  const existingGatewayType = existingConfig?.gatewayType ?? "openclaw";
21
- if (existingConfig && existingGatewayType === gatewayType) {
23
+ const requestedRelayServerUrl = opts.server ?? getDefaultRelayServerUrl();
24
+ const canReuseExistingConfig = shouldReuseExistingPairing(existingConfig, gatewayType, requestedRelayServerUrl);
25
+ if (existingConfig && canReuseExistingConfig) {
22
26
  const config = existingConfig;
23
- relayServerUrl = opts.server ?? config.relayServerUrl ?? getDefaultRelayServerUrl();
27
+ relayServerUrl = requestedRelayServerUrl;
24
28
  gatewayId = config.gatewayId;
25
29
  relaySecret = config.relaySecret;
26
30
  displayName = opts.name ? sanitizeDisplayName(opts.name) : config.displayName;
@@ -46,8 +50,16 @@ export async function pairCommand(opts) {
46
50
  if (existingConfig && existingGatewayType !== gatewayType) {
47
51
  console.log(`Existing ${existingGatewayType} gateway config found; registering a new ${gatewayType} gateway.`);
48
52
  }
49
- relayServerUrl = opts.server ?? existingConfig?.relayServerUrl ?? getDefaultRelayServerUrl();
50
- displayName = opts.name ? sanitizeDisplayName(opts.name) : getDisplayName();
53
+ else if (existingConfig && !sameRelayServer(existingConfig.relayServerUrl, requestedRelayServerUrl)) {
54
+ console.log(`Existing ${gatewayType} gateway config is for ${toRelayHttpBase(existingConfig.relayServerUrl)}.`);
55
+ console.log(`Requested relay is ${toRelayHttpBase(requestedRelayServerUrl)}; registering a new ${gatewayType} gateway.`);
56
+ }
57
+ const backupPath = existingConfig ? backupExistingConfig() : undefined;
58
+ if (backupPath) {
59
+ console.log(`Previous config backed up to ${backupPath}`);
60
+ }
61
+ relayServerUrl = requestedRelayServerUrl;
62
+ displayName = opts.name ? sanitizeDisplayName(opts.name) : existingConfig?.displayName ?? getDisplayName();
51
63
  console.log(t("pair.registering"));
52
64
  const httpBase = toRelayHttpBase(relayServerUrl);
53
65
  const res = await fetch(`${httpBase}/api/relay/register`, {
@@ -88,6 +100,51 @@ export async function pairCommand(opts) {
88
100
  console.log(t("pair.installingService"));
89
101
  installCommand();
90
102
  }
103
+ export function sameRelayServer(left, right) {
104
+ return normalizeRelayServerIdentity(left) === normalizeRelayServerIdentity(right);
105
+ }
106
+ export function shouldReuseExistingPairing(config, gatewayType, requestedRelayServerUrl) {
107
+ if (!config)
108
+ return false;
109
+ return (config.gatewayType ?? "openclaw") === gatewayType
110
+ && sameRelayServer(config.relayServerUrl, requestedRelayServerUrl);
111
+ }
112
+ export function normalizeRelayServerIdentity(relayServerUrl) {
113
+ const parsed = new URL(toRelayHttpBase(relayServerUrl));
114
+ const protocol = parsed.protocol.toLowerCase();
115
+ const host = normalizeRelayHost(parsed.hostname);
116
+ const port = parsed.port || (protocol === "https:" ? "443" : "80");
117
+ const pathname = parsed.pathname.replace(/\/+$/, "");
118
+ return `${protocol}//${host}:${port}${pathname}`;
119
+ }
120
+ function normalizeRelayHost(hostname) {
121
+ const lower = hostname.toLowerCase();
122
+ if (lower === "localhost" || lower === "::1" || lower === "[::1]") {
123
+ return "127.0.0.1";
124
+ }
125
+ return lower;
126
+ }
127
+ function backupExistingConfig() {
128
+ const configPath = getConfigPath();
129
+ if (!existsSync(configPath)) {
130
+ return undefined;
131
+ }
132
+ const backupPath = join(dirname(configPath), `config.json.server-switch-${formatBackupTimestamp(new Date())}.bak`);
133
+ copyFileSync(configPath, backupPath);
134
+ return backupPath;
135
+ }
136
+ function formatBackupTimestamp(date) {
137
+ const pad = (value) => String(value).padStart(2, "0");
138
+ return [
139
+ date.getFullYear(),
140
+ pad(date.getMonth() + 1),
141
+ pad(date.getDate()),
142
+ "-",
143
+ pad(date.getHours()),
144
+ pad(date.getMinutes()),
145
+ pad(date.getSeconds()),
146
+ ].join("");
147
+ }
91
148
  function sanitizeDisplayName(name) {
92
149
  // Replace smart quotes and other problematic characters with regular ones
93
150
  return name
@@ -1 +1 @@
1
- {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAA0B,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAU1F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,IAAI,SAAiB,CAAC;IACtB,IAAI,WAAmB,CAAC;IACxB,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IACxB,IAAI,cAAsB,CAAC;IAC3B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;IAE7D,MAAM,cAAc,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,MAAM,mBAAmB,GAAG,cAAc,EAAE,WAAW,IAAI,UAAU,CAAC;IACtE,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,IAAI,wBAAwB,EAAE,CAAC;IAC1E,MAAM,sBAAsB,GAAG,0BAA0B,CACvD,cAAc,EACd,WAAW,EACX,uBAAuB,CACxB,CAAC;IAEF,IAAI,cAAc,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,cAAc,CAAC;QAC9B,cAAc,GAAG,uBAAuB,CAAC;QACzC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAC7B,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAE9E,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,uBAAuB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;SACjD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;QAC1D,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAE7B,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC,CAAC;IAC7J,CAAC;SAAM,CAAC;QACN,IAAI,cAAc,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,mBAAmB,4CAA4C,WAAW,WAAW,CAAC,CAAC;QACjH,CAAC;aAAM,IAAI,cAAc,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,cAAc,EAAE,uBAAuB,CAAC,EAAE,CAAC;YACtG,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,0BAA0B,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAChH,OAAO,CAAC,GAAG,CAAC,sBAAsB,eAAe,CAAC,uBAAuB,CAAC,uBAAuB,WAAW,WAAW,CAAC,CAAC;QAC3H,CAAC;QACD,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,cAAc,GAAG,uBAAuB,CAAC;QACzC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,WAAW,IAAI,cAAc,EAAE,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAEnC,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,qBAAqB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;SACjE,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,yBAAyB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAI7B,CAAC;QAEF,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAE7B,WAAW,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;QAEhG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,QAAQ;QAChB,SAAS;QACT,UAAU;QACV,WAAW;QACX,WAAW;QACX,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9B,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACzC,cAAc,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,4BAA4B,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAgC,EAChC,WAAkC,EAClC,uBAA+B;IAE/B,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,UAAU,CAAC,KAAK,WAAW;WACpD,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,cAAsB;IACjE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAClE,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CACrB,OAAO,CAAC,UAAU,CAAC,EACnB,6BAA6B,qBAAqB,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,CACrE,CAAC;IACF,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAU;IACvC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtE,OAAO;QACL,IAAI,CAAC,WAAW,EAAE;QAClB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;KACvB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,0EAA0E;IAC1E,OAAO,IAAI;SACR,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,iCAAiC;SAC7E,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,+BAA+B;SAC/D,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,sCAAsC;SAChE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,iCAAiC;AACvE,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,kBAAkB,EAAE,KAAK,OAAO,EAAE,CAAC;QACrC,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { readConfig, readGatewayUrl, readGatewayAuth } from "../config/config.js";
2
2
  import { getGatewayRuntimeAdapter } from "../runtime-adapters.js";
3
- import { withReconnect } from "../relay/reconnect.js";
3
+ import { withReconnect } from "../core/relay/reconnect.js";
4
4
  import { t } from "../i18n/index.js";
5
5
  import { createInterface } from "readline";
6
6
  export async function runCommand() {
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,CAAC;IACrD,MAAM,cAAc,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAE5C,wEAAwE;IACxE,wEAAwE;IACxE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,GAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE/B,wEAAwE;IACxE,wEAAwE;IACxE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3B,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACzD,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,cAAc,CAAC,cAAc,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,aAAa,CACjB,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;QACzB,MAAM;QACN,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;QAClC,WAAW;QACX,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAClD,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;KACzD,CAAC,EACF;QACE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,CAAC;IACrD,MAAM,cAAc,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAE5C,wEAAwE;IACxE,wEAAwE;IACxE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,GAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE/B,wEAAwE;IACxE,wEAAwE;IACxE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3B,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACzD,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,cAAc,CAAC,cAAc,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,aAAa,CACjB,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;QACzB,MAAM;QACN,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;QAClC,WAAW;QACX,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAClD,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;KACzD,CAAC,EACF;QACE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { type ClawConnectConfig } from "../config/config.js";
2
+ import { type FileUploadResult } from "../core/relay/file-upload.js";
2
3
  export interface SendFileCommandOptions {
3
4
  filePath: string;
4
5
  gateway?: string;
@@ -15,29 +16,5 @@ export interface SendFileCommandDependencies {
15
16
  stderr?: Pick<NodeJS.WritableStream, "write">;
16
17
  sessionStoreRoot?: string;
17
18
  }
18
- export interface SendFileResult {
19
- filePath: string;
20
- absolutePath: string;
21
- gatewayId: string;
22
- sessionKey: string;
23
- fileId: string;
24
- uploadId: string;
25
- fileName: string;
26
- mimeType: string;
27
- sizeBytes: number;
28
- durationMs?: number;
29
- imageWidth?: number;
30
- imageHeight?: number;
31
- sha256: string;
32
- chunkSize: number;
33
- totalChunks: number;
34
- sourceRunId?: string;
35
- expiresAt: string;
36
- downloadPath: string;
37
- downloadUrl: string;
38
- senderDisplayName?: string;
39
- status: string;
40
- createdAt: string;
41
- updatedAt: string;
42
- }
19
+ export type SendFileResult = FileUploadResult;
43
20
  export declare function sendFileCommand(opts: SendFileCommandOptions, deps?: SendFileCommandDependencies): Promise<SendFileResult>;