clawconnect-agent 0.1.7 → 0.1.8

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 (197) hide show
  1. package/README.md +62 -30
  2. package/README.zh-CN.md +62 -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/openclaw/backups/backup-manager.js.map +1 -0
  83. package/dist/{commands → openclaw/config}/provider-config.js +1 -1
  84. package/dist/openclaw/config/provider-config.js.map +1 -0
  85. package/dist/openclaw/config/provider-registry.js.map +1 -0
  86. package/dist/openclaw/gateway-client.js.map +1 -0
  87. package/dist/{commands → openclaw/handlers}/local-handlers.d.ts +1 -1
  88. package/dist/{commands → openclaw/handlers}/local-handlers.js +2 -2
  89. package/dist/openclaw/handlers/local-handlers.js.map +1 -0
  90. package/dist/{commands → openclaw/handlers}/provider-handlers.d.ts +1 -1
  91. package/dist/{commands → openclaw/handlers}/provider-handlers.js +3 -3
  92. package/dist/openclaw/handlers/provider-handlers.js.map +1 -0
  93. package/dist/openclaw/relay/chat-history.d.ts +51 -0
  94. package/dist/openclaw/relay/chat-history.js +347 -0
  95. package/dist/openclaw/relay/chat-history.js.map +1 -0
  96. package/dist/{relay → openclaw/relay}/chat-send-attachments.js +12 -1
  97. package/dist/openclaw/relay/chat-send-attachments.js.map +1 -0
  98. package/dist/{relay → openclaw/relay}/openclaw-voice-input.js +1 -1
  99. package/dist/openclaw/relay/openclaw-voice-input.js.map +1 -0
  100. package/dist/openclaw/relay/outgoing-media-relay.d.ts +11 -0
  101. package/dist/openclaw/relay/outgoing-media-relay.js +120 -0
  102. package/dist/openclaw/relay/outgoing-media-relay.js.map +1 -0
  103. package/dist/{relay → openclaw/relay}/session-context.d.ts +6 -0
  104. package/dist/{relay → openclaw/relay}/session-context.js +42 -2
  105. package/dist/openclaw/relay/session-context.js.map +1 -0
  106. package/dist/openclaw/relay/slash-command-catalog.d.ts +2 -0
  107. package/dist/openclaw/relay/slash-command-catalog.generated.js.map +1 -0
  108. package/dist/openclaw/relay/slash-command-catalog.js.map +1 -0
  109. package/dist/openclaw/relay/transcript-dedupe.d.ts +21 -0
  110. package/dist/openclaw/relay/transcript-dedupe.js +211 -0
  111. package/dist/openclaw/relay/transcript-dedupe.js.map +1 -0
  112. package/dist/{relay → openclaw}/relay-manager.d.ts +1 -1
  113. package/dist/{relay → openclaw}/relay-manager.js +373 -99
  114. package/dist/openclaw/relay-manager.js.map +1 -0
  115. package/dist/{commands → openclaw/runtime}/local-runtime.d.ts +1 -17
  116. package/dist/openclaw/runtime/local-runtime.js.map +1 -0
  117. package/dist/openclaw/session-store.d.ts +1 -0
  118. package/dist/openclaw/session-store.js +70 -0
  119. package/dist/openclaw/session-store.js.map +1 -0
  120. package/dist/runtime-adapters.js +1 -1
  121. package/dist/runtime-adapters.js.map +1 -1
  122. package/package.json +2 -2
  123. package/dist/commands/backup-manager.js.map +0 -1
  124. package/dist/commands/local-handlers.js.map +0 -1
  125. package/dist/commands/local-runtime.js.map +0 -1
  126. package/dist/commands/provider-config.js.map +0 -1
  127. package/dist/commands/provider-handlers.js.map +0 -1
  128. package/dist/commands/provider-registry.js.map +0 -1
  129. package/dist/commands/send-file-utils.js.map +0 -1
  130. package/dist/hermes/models/hermes-runtime-artifacts.js.map +0 -1
  131. package/dist/hermes/models/hermes-runtime-backups.js.map +0 -1
  132. package/dist/hermes/models/hermes-runtime-chat.js.map +0 -1
  133. package/dist/hermes/models/hermes-runtime-command-router.js.map +0 -1
  134. package/dist/hermes/models/hermes-runtime-command-utils.js.map +0 -1
  135. package/dist/hermes/models/hermes-runtime-cron.js.map +0 -1
  136. package/dist/hermes/models/hermes-runtime-lifecycle.js.map +0 -1
  137. package/dist/hermes/models/hermes-runtime-models.js.map +0 -1
  138. package/dist/hermes/models/hermes-runtime-process.js.map +0 -1
  139. package/dist/hermes/models/hermes-runtime-sessions.js.map +0 -1
  140. package/dist/hermes/models/hermes-runtime-skills.js.map +0 -1
  141. package/dist/hermes/models/hermes-runtime-types.js.map +0 -1
  142. package/dist/hermes/models/hermes-runtime-usage.js.map +0 -1
  143. package/dist/hermes/models/hermes-runtime-values.js.map +0 -1
  144. package/dist/relay/attachment-staging.js.map +0 -1
  145. package/dist/relay/chat-history.d.ts +0 -29
  146. package/dist/relay/chat-history.js +0 -87
  147. package/dist/relay/chat-history.js.map +0 -1
  148. package/dist/relay/chat-payload.js.map +0 -1
  149. package/dist/relay/chat-send-attachments.js.map +0 -1
  150. package/dist/relay/gateway-client.js.map +0 -1
  151. package/dist/relay/mobile-chat-run-bridge.d.ts +0 -93
  152. package/dist/relay/mobile-chat-run-bridge.js +0 -68
  153. package/dist/relay/mobile-chat-run-bridge.js.map +0 -1
  154. package/dist/relay/office-payload.js.map +0 -1
  155. package/dist/relay/openclaw-voice-input.js.map +0 -1
  156. package/dist/relay/reconnect.js.map +0 -1
  157. package/dist/relay/relay-manager.js.map +0 -1
  158. package/dist/relay/session-context.js.map +0 -1
  159. package/dist/relay/slash-command-catalog.generated.js.map +0 -1
  160. package/dist/relay/slash-command-catalog.js.map +0 -1
  161. package/dist/relay/voice-input.js.map +0 -1
  162. /package/dist/{relay → core/relay}/attachment-staging.d.ts +0 -0
  163. /package/dist/{relay → core/relay}/attachment-staging.js +0 -0
  164. /package/dist/{relay → core/relay}/chat-payload.d.ts +0 -0
  165. /package/dist/{commands/send-file-utils.d.ts → core/relay/file-upload-utils.d.ts} +0 -0
  166. /package/dist/{relay → core/relay}/office-payload.d.ts +0 -0
  167. /package/dist/{relay → core/relay}/office-payload.js +0 -0
  168. /package/dist/{relay → core/relay}/reconnect.d.ts +0 -0
  169. /package/dist/{relay → core/relay}/reconnect.js +0 -0
  170. /package/dist/{relay → core/relay}/voice-input.d.ts +0 -0
  171. /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.d.ts +0 -0
  172. /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.js +0 -0
  173. /package/dist/hermes/{models → runtime}/hermes-runtime-backups.js +0 -0
  174. /package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.js +0 -0
  175. /package/dist/hermes/{models → runtime}/hermes-runtime-cron.js +0 -0
  176. /package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.js +0 -0
  177. /package/dist/hermes/{models → runtime}/hermes-runtime-models.js +0 -0
  178. /package/dist/hermes/{models → runtime}/hermes-runtime-skills.js +0 -0
  179. /package/dist/hermes/{models → runtime}/hermes-runtime-types.d.ts +0 -0
  180. /package/dist/hermes/{models → runtime}/hermes-runtime-types.js +0 -0
  181. /package/dist/hermes/{models → runtime}/hermes-runtime-usage.d.ts +0 -0
  182. /package/dist/hermes/{models → runtime}/hermes-runtime-usage.js +0 -0
  183. /package/dist/hermes/{models → runtime}/hermes-runtime-values.d.ts +0 -0
  184. /package/dist/hermes/{models → runtime}/hermes-runtime-values.js +0 -0
  185. /package/dist/{commands → openclaw/backups}/backup-manager.d.ts +0 -0
  186. /package/dist/{commands → openclaw/backups}/backup-manager.js +0 -0
  187. /package/dist/{commands → openclaw/config}/provider-config.d.ts +0 -0
  188. /package/dist/{commands → openclaw/config}/provider-registry.d.ts +0 -0
  189. /package/dist/{commands → openclaw/config}/provider-registry.js +0 -0
  190. /package/dist/{relay → openclaw}/gateway-client.d.ts +0 -0
  191. /package/dist/{relay → openclaw}/gateway-client.js +0 -0
  192. /package/dist/{relay → openclaw/relay}/chat-send-attachments.d.ts +0 -0
  193. /package/dist/{relay → openclaw/relay}/openclaw-voice-input.d.ts +0 -0
  194. /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.d.ts +0 -0
  195. /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.js +0 -0
  196. /package/dist/{relay → openclaw/relay}/slash-command-catalog.js +0 -0
  197. /package/dist/{commands → openclaw/runtime}/local-runtime.js +0 -0
package/README.md CHANGED
@@ -123,7 +123,8 @@ Supported values:
123
123
  - `CLAWCONNECT_GATEWAY_URL` — optional local Gateway websocket URL override
124
124
  - `CLAWCONNECT_ENV_FILE` — optional explicit env file path. When unset, the agent reads `~/.clawconnect/.env`, then `.env.local`, then `.env`
125
125
  - `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}`
126
+ - `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}`
127
+ - `OPENCLAW_ASR_COMMAND` — legacy speech-to-text command fallback. `CLAWCONNECT_ASR_COMMAND` takes precedence when both are set.
127
128
 
128
129
  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
130
 
@@ -138,10 +139,10 @@ clawconnect run
138
139
  Optional: let ClawLink send raw voice messages and have the host transcribe them before forwarding text to OpenClaw or Hermes Agent:
139
140
 
140
141
  ```bash
141
- OPENCLAW_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
142
+ CLAWCONNECT_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
142
143
  ```
143
144
 
144
- If `OPENCLAW_ASR_COMMAND` is not configured, voice messages fail with `voice_asr_not_configured`.
145
+ If neither `CLAWCONNECT_ASR_COMMAND` nor legacy `OPENCLAW_ASR_COMMAND` is configured, voice messages fail with `voice_asr_not_configured`.
145
146
 
146
147
  ### Check Status
147
148
 
@@ -264,34 +265,58 @@ clawconnect-agent/
264
265
  status.ts
265
266
  install.ts
266
267
  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
268
  *.test.ts
269
+ core/
270
+ command-types.ts
271
+ relay/
272
+ file-upload.ts
273
+ file-upload-utils.ts
274
+ relay-server-connection.ts
275
+ reconnect.ts
276
+ office-payload.ts
277
+ mobile-chat-run-bridge.ts
278
+ voice-input.ts
279
+ attachment-staging.ts
280
+ chat-payload.ts
281
+ slash-command-types.ts
275
282
  config/
276
283
  config.ts
277
284
  env.ts
285
+ hermes/
286
+ hermes-relay-manager.ts
287
+ hermes-runtime.ts
288
+ hermes-session-store.ts
289
+ hermes-voice-input.ts
290
+ runtime/
291
+ hermes-runtime-*.ts
278
292
  i18n/
279
293
  index.ts
294
+ openclaw/
295
+ relay-manager.ts
296
+ gateway-client.ts
297
+ session-store.ts
298
+ runtime/
299
+ local-runtime.ts
300
+ handlers/
301
+ local-handlers.ts
302
+ provider-handlers.ts
303
+ config/
304
+ provider-config.ts
305
+ provider-registry.ts
306
+ backups/
307
+ backup-manager.ts
308
+ relay/
309
+ session-context.ts
310
+ chat-history.ts
311
+ chat-send-attachments.ts
312
+ openclaw-voice-input.ts
313
+ slash-command-catalog.ts
314
+ slash-command-catalog.generated.ts
280
315
  platform/
281
316
  service-manager.ts
282
317
  service-manager-common.ts
283
318
  service-manager-linux.ts
284
319
  *.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
320
  ```
296
321
 
297
322
  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 +326,23 @@ Tests are colocated with the source as `*.test.ts`. They run with `npm test`, an
301
326
  - `src/index.ts` is the CLI entrypoint. It wires every command together and handles top-level errors.
302
327
  - `src/commands/pair.ts` registers a host, saves relay config, and installs the background service after pairing.
303
328
  - `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.
329
+ - `src/commands/send-file.ts` is the CLI wrapper for uploading local files or images into the paired chat session.
305
330
  - `src/commands/install.ts` manages service install, restart, stop, uninstall, and reset flows.
306
331
  - `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.
332
+ - `src/core/relay/file-upload.ts` contains the programmatic relay file upload client used by both CLI and Hermes artifact delivery.
333
+ - `src/core/relay/relay-server-connection.ts` contains shared relay URL, JSON frame, abort, and retry-close helpers.
334
+ - `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.
335
+ - `src/openclaw/handlers/local-handlers.ts` handles legacy command prefixes and local maintenance actions such as backup, restore, logs, doctor, and gateway restart.
336
+ - `src/openclaw/runtime/local-runtime.ts` resolves the `openclaw` binary and triggers gateway lifecycle actions.
337
+ - `src/openclaw/handlers/provider-handlers.ts` routes provider-specific commands and reuses the same gateway restart path.
338
+ - `src/openclaw/relay-manager.ts` bridges the relay server and the local OpenClaw Gateway, dispatches commands, and handles chat/history fallbacks.
339
+ - `src/openclaw/gateway-client.ts` manages the websocket connection to OpenClaw Gateway and device authentication.
340
+ - `src/openclaw/relay/session-context.ts` reads session defaults and context usage snapshots.
341
+ - `src/openclaw/relay/chat-history.ts` and `chat-send-attachments.ts` handle OpenClaw-specific history fallback and attachment staging for `chat.send`.
342
+ - `src/hermes/hermes-relay-manager.ts` bridges Hermes runtime commands to the relay server.
343
+ - `src/hermes/runtime/` contains Hermes CLI/Python execution modules for chat, cron, skills, models, sessions, usage, and lifecycle operations.
310
344
  - `src/config/env.ts` loads `.env` files and exposes agent defaults such as relay and Gateway URLs.
311
345
  - `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
346
  - `src/config/config.ts` reads and writes local pairing config under `~/.clawconnect`.
317
347
  - `src/i18n/index.ts` contains the localized CLI strings.
318
348
 
@@ -320,15 +350,17 @@ Tests are colocated with the source as `*.test.ts`. They run with `npm test`, an
320
350
 
321
351
  - `pairCommand()` registers a host, generates the pairing payload, and persists relay config.
322
352
  - `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.
353
+ - `sendFileCommand()` handles CLI config/session defaults and delegates uploads to `uploadFileToRelay()`.
354
+ - `uploadFileToRelay()` uploads a file to the relay using explicit relay URL, secret, gateway ID, and session key.
324
355
  - `installCommand()`, `restartCommand()`, `stopCommand()`, `uninstallCommand()`, and `resetCommand()` manage the service lifecycle.
325
356
  - `statusCommand()` prints pairing config, gateway state, and service health.
326
357
  - `setTokenCommand()` stores the local OpenClaw Gateway token.
327
- - `handleLocalCommand()` and `handleProviderCommand()` process local control-plane commands before forwarding to the gateway.
358
+ - `handleLocalCommand()` and `handleProviderCommand()` process OpenClaw local control-plane commands before forwarding to the gateway.
328
359
  - `OpenClawGatewayClient` manages the gateway websocket, reconnects, and request/response frames.
329
360
  - `canonicalizeRelayParams()`, `extractGatewaySessionDefaults()`, and `buildContextUsageFingerprint()` normalize relay protocol payloads.
330
361
  - `normalizeChatEventPayload()`, `extractChatText()`, `extractHistoryOutcome()`, and `withMessageText()` keep chat payloads stable across relay and gateway responses.
331
362
  - `buildAttachmentStagingPath()` and `resolveAttachmentFileName()` manage file staging for attachments.
363
+ - `buildRelayUrl()`, `sendRelayJson()`, `parseRelayFrame()`, and `shouldRetryRelayClose()` share narrow relay transport behavior across OpenClaw and Hermes.
332
364
  - `getServiceStatus()`, `installService()`, `restartService()`, `stopService()`, and `uninstallService()` implement platform-specific service control.
333
365
 
334
366
  ## How It Works
package/README.zh-CN.md CHANGED
@@ -130,7 +130,8 @@ $EDITOR ~/.clawconnect/.env
130
130
  - `CLAWCONNECT_GATEWAY_URL`:可选,本机 OpenClaw Gateway WebSocket 地址覆盖值
131
131
  - `CLAWCONNECT_ENV_FILE`:可选,显式指定 env 文件路径;未设置时会依次读取 `~/.clawconnect/.env`、`.env.local`、`.env`
132
132
  - `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`:Gateway 鉴权兜底值
133
- - `OPENCLAW_ASR_COMMAND`:宿主机语音转文字命令。ClawLink 发送 `chat.voice.send` 后,agent 会把音频保存到临时文件,并执行这个命令;命令必须把识别文本输出到 stdout。可用占位符:`{file}`、`{language}`、`{mimeType}`
133
+ - `CLAWCONNECT_ASR_COMMAND`:宿主机语音转文字命令。ClawLink 发送 `chat.voice.send` 后,agent 会把音频保存到临时文件,并执行这个命令;命令必须把识别文本输出到 stdout。可用占位符:`{file}`、`{language}`、`{mimeType}`
134
+ - `OPENCLAW_ASR_COMMAND`:旧版语音转文字命令兜底值;同时设置时优先使用 `CLAWCONNECT_ASR_COMMAND`
134
135
 
135
136
  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
137
 
@@ -147,10 +148,10 @@ clawconnect run
147
148
  如果需要让手机端直接发送语音、由宿主机识别后再转发给 OpenClaw 或 Hermes Agent,请配置本机 ASR 命令:
148
149
 
149
150
  ```bash
150
- OPENCLAW_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
151
+ CLAWCONNECT_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
151
152
  ```
152
153
 
153
- 未配置 `OPENCLAW_ASR_COMMAND` 时,宿主机收到语音消息会返回 `voice_asr_not_configured`。
154
+ 未配置 `CLAWCONNECT_ASR_COMMAND`,且也没有旧版 `OPENCLAW_ASR_COMMAND` 兜底时,宿主机收到语音消息会返回 `voice_asr_not_configured`。
154
155
 
155
156
  ### 4. 查看状态
156
157
 
@@ -279,34 +280,58 @@ clawconnect-agent/
279
280
  status.ts 查看配对与服务状态
280
281
  install.ts install / restart / stop / uninstall / reset
281
282
  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
283
  *.test.ts 紧邻源码的单元测试
284
+ core/
285
+ command-types.ts 共享本地命令结果和上下文类型
286
+ relay/
287
+ file-upload.ts 纯 relay 文件上传服务
288
+ file-upload-utils.ts relay 地址和文件传输辅助
289
+ relay-server-connection.ts relay URL、JSON 帧、abort 和 close retry 辅助
290
+ reconnect.ts 重连策略
291
+ office-payload.ts office/status payload 构造
292
+ mobile-chat-run-bridge.ts 移动端 chat run payload 转换
293
+ voice-input.ts 共享语音输入 / ASR 参数处理
294
+ attachment-staging.ts 附件 MIME 和暂存路径辅助
295
+ chat-payload.ts 聊天 payload 归一化
296
+ slash-command-types.ts slash command 共享类型
290
297
  config/
291
298
  config.ts 配对配置读写
292
299
  env.ts env 文件加载和 agent 默认配置
300
+ hermes/
301
+ hermes-relay-manager.ts Hermes relay 桥接
302
+ hermes-runtime.ts Hermes runtime 聚合入口
303
+ hermes-session-store.ts Hermes 会话别名存储
304
+ hermes-voice-input.ts Hermes 语音输入适配
305
+ runtime/
306
+ hermes-runtime-*.ts Hermes CLI/Python、chat、cron、skills、models、usage 等执行模块
293
307
  i18n/
294
308
  index.ts CLI 文案
309
+ openclaw/
310
+ relay-manager.ts OpenClaw 中继服务器桥接与命令分发
311
+ gateway-client.ts 连接并认证本地 OpenClaw Gateway
312
+ session-store.ts OpenClaw 最新会话推断
313
+ runtime/
314
+ local-runtime.ts 解析 OpenClaw 可执行文件并触发网关生命周期
315
+ handlers/
316
+ local-handlers.ts 兼容旧命令前缀和本地维护命令
317
+ provider-handlers.ts provider 命令分发和网关重启
318
+ config/
319
+ provider-config.ts provider 配置读写
320
+ provider-registry.ts provider 注册信息
321
+ backups/
322
+ backup-manager.ts 本地配置备份管理
323
+ relay/
324
+ session-context.ts 会话默认值和上下文使用量快照
325
+ chat-history.ts 历史消息回退
326
+ chat-send-attachments.ts 发送带附件消息的参数准备
327
+ openclaw-voice-input.ts OpenClaw 语音命令适配
328
+ slash-command-catalog.ts OpenClaw slash command 目录
329
+ slash-command-catalog.generated.ts 生成的 OpenClaw slash command 目录
295
330
  platform/
296
331
  service-manager.ts 跨平台服务入口
297
332
  service-manager-common.ts 通用平台辅助常量
298
333
  service-manager-linux.ts Linux systemd/nohup 逻辑
299
334
  *.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
335
  ```
311
336
 
312
337
  测试文件和源码采用邻近放置的方式,统一以 `*.test.ts` 命名。它们会被 `npm test` 执行,但不会进入发布包。
@@ -316,18 +341,23 @@ clawconnect-agent/
316
341
  - `src/index.ts` 是 CLI 入口,负责命令注册和顶层错误处理。
317
342
  - `src/commands/pair.ts` 负责主机配对、保存 relay 配置,并在配对后安装后台服务。
318
343
  - `src/commands/run.ts` 负责前台启动 relay 循环,供服务管理或调试使用。
319
- - `src/commands/send-file.ts` 负责把本地文件或图片上传到已配对的聊天会话。
344
+ - `src/commands/send-file.ts` 是发送本地文件或图片到已配对聊天会话的 CLI wrapper。
320
345
  - `src/commands/install.ts` 负责后台服务的安装、重启、停止、卸载和重置。
321
346
  - `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 重启逻辑。
347
+ - `src/core/relay/file-upload.ts` 是纯程序化 relay 文件上传服务,供 CLI 和 Hermes artifact delivery 复用。
348
+ - `src/core/relay/relay-server-connection.ts` 提供共享 relay URL、JSON 帧、abort close 和 close retry 判断。
349
+ - `src/core/relay/office-payload.ts`、`mobile-chat-run-bridge.ts`、`voice-input.ts`、`attachment-staging.ts`、`chat-payload.ts` 是 gateway-neutral 的 relay 工具。
350
+ - `src/openclaw/handlers/local-handlers.ts` 负责兼容旧命令前缀,以及备份、恢复、日志、doctor、gateway 重启等本地维护命令。
351
+ - `src/openclaw/runtime/local-runtime.ts` 负责解析 `openclaw` 可执行文件并触发网关生命周期动作。
352
+ - `src/openclaw/handlers/provider-handlers.ts` 负责 provider 专属命令分发,并复用同一套 gateway 重启逻辑。
353
+ - `src/openclaw/relay-manager.ts` 负责中继服务器与本地 OpenClaw Gateway 的桥接、命令分发,以及 chat/history 回退处理。
354
+ - `src/openclaw/gateway-client.ts` 负责连接 OpenClaw Gateway,并处理设备身份认证。
355
+ - `src/openclaw/relay/session-context.ts` 负责读取会话默认值和上下文使用量快照。
356
+ - `src/openclaw/relay/chat-history.ts`、`chat-send-attachments.ts` 负责 OpenClaw 专属历史回退和 `chat.send` 附件暂存。
357
+ - `src/hermes/hermes-relay-manager.ts` 负责 Hermes runtime 与 relay server 的桥接。
358
+ - `src/hermes/runtime/` 放置 Hermes CLI/Python、chat、cron、skills、models、sessions、usage 和 lifecycle 等执行模块。
325
359
  - `src/config/env.ts` 负责加载 `.env` 文件,并集中维护 relay、Gateway 等 agent 默认配置。
326
360
  - `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
361
  - `src/config/config.ts` 负责读写 `~/.clawconnect` 下的本地配对配置。
332
362
  - `src/i18n/index.ts` 负责 CLI 文案。
333
363
 
@@ -335,15 +365,17 @@ clawconnect-agent/
335
365
 
336
366
  - `pairCommand()` 负责主机配对、生成配对 payload,并持久化 relay 配置。
337
367
  - `runCommand()` 负责启动前台 relay 客户端循环,供后台服务使用。
338
- - `sendFileCommand()` 负责暂存本地文件并上传到已配对的聊天会话。
368
+ - `sendFileCommand()` 负责 CLI 配置、会话默认值和输出格式,并委托 `uploadFileToRelay()` 上传。
369
+ - `uploadFileToRelay()` 使用显式 relay URL、secret、gateway ID 和 session key 上传文件。
339
370
  - `installCommand()`、`restartCommand()`、`stopCommand()`、`uninstallCommand()`、`resetCommand()` 负责服务生命周期管理。
340
371
  - `statusCommand()` 负责打印配对配置、Gateway 状态和服务健康信息。
341
372
  - `setTokenCommand()` 负责保存本地 OpenClaw Gateway Token。
342
- - `handleLocalCommand()` 和 `handleProviderCommand()` 负责在转发前处理本地控制平面命令。
373
+ - `handleLocalCommand()` 和 `handleProviderCommand()` 负责在转发前处理 OpenClaw 本地控制平面命令。
343
374
  - `OpenClawGatewayClient` 负责管理 Gateway WebSocket、重连和请求/响应帧。
344
375
  - `canonicalizeRelayParams()`、`extractGatewaySessionDefaults()`、`buildContextUsageFingerprint()` 负责统一 relay 协议 payload。
345
376
  - `normalizeChatEventPayload()`、`extractChatText()`、`extractHistoryOutcome()`、`withMessageText()` 负责稳定聊天事件与历史回退结果。
346
377
  - `buildAttachmentStagingPath()` 和 `resolveAttachmentFileName()` 负责附件暂存路径和文件名处理。
378
+ - `buildRelayUrl()`、`sendRelayJson()`、`parseRelayFrame()`、`shouldRetryRelayClose()` 负责 OpenClaw 和 Hermes 共享的窄 relay transport 行为。
347
379
  - `getServiceStatus()`、`installService()`、`restartService()`、`stopService()`、`uninstallService()` 负责跨平台服务控制。
348
380
 
349
381
  ## 工作原理
@@ -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":"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"}
@@ -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>;