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.
- package/README.md +70 -30
- package/README.zh-CN.md +70 -30
- package/dist/commands/pair.d.ts +4 -0
- package/dist/commands/pair.js +63 -6
- package/dist/commands/pair.js.map +1 -1
- package/dist/commands/run.js +1 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/send-file.d.ts +2 -25
- package/dist/commands/send-file.js +22 -455
- package/dist/commands/send-file.js.map +1 -1
- package/dist/core/command-types.d.ts +18 -0
- package/dist/core/command-types.js +2 -0
- package/dist/core/command-types.js.map +1 -0
- package/dist/core/relay/attachment-staging.js.map +1 -0
- package/dist/{relay → core/relay}/chat-payload.js +17 -3
- package/dist/core/relay/chat-payload.js.map +1 -0
- package/dist/{commands/send-file-utils.js → core/relay/file-upload-utils.js} +1 -1
- package/dist/core/relay/file-upload-utils.js.map +1 -0
- package/dist/core/relay/file-upload.d.ts +40 -0
- package/dist/core/relay/file-upload.js +401 -0
- package/dist/core/relay/file-upload.js.map +1 -0
- package/dist/core/relay/mobile-chat-run-bridge.d.ts +201 -0
- package/dist/core/relay/mobile-chat-run-bridge.js +192 -0
- package/dist/core/relay/mobile-chat-run-bridge.js.map +1 -0
- package/dist/core/relay/office-payload.js.map +1 -0
- package/dist/core/relay/reconnect.js.map +1 -0
- package/dist/core/relay/relay-server-connection.d.ts +6 -0
- package/dist/core/relay/relay-server-connection.js +32 -0
- package/dist/core/relay/relay-server-connection.js.map +1 -0
- package/dist/{relay/slash-command-catalog.d.ts → core/relay/slash-command-types.d.ts} +0 -1
- package/dist/core/relay/slash-command-types.js +2 -0
- package/dist/core/relay/slash-command-types.js.map +1 -0
- package/dist/core/relay/timeline-event-builder.d.ts +86 -0
- package/dist/core/relay/timeline-event-builder.js +199 -0
- package/dist/core/relay/timeline-event-builder.js.map +1 -0
- package/dist/core/relay/timeline-event-log.d.ts +81 -0
- package/dist/core/relay/timeline-event-log.js +254 -0
- package/dist/core/relay/timeline-event-log.js.map +1 -0
- package/dist/{relay → core/relay}/voice-input.js +5 -3
- package/dist/core/relay/voice-input.js.map +1 -0
- package/dist/hermes/hermes-relay-manager.d.ts +14 -4
- package/dist/hermes/hermes-relay-manager.js +159 -41
- package/dist/hermes/hermes-relay-manager.js.map +1 -1
- package/dist/hermes/hermes-runtime.d.ts +9 -8
- package/dist/hermes/hermes-runtime.js +8 -7
- package/dist/hermes/hermes-runtime.js.map +1 -1
- package/dist/hermes/hermes-session-store.js +52 -30
- package/dist/hermes/hermes-session-store.js.map +1 -1
- package/dist/hermes/hermes-voice-input.js +1 -1
- package/dist/hermes/hermes-voice-input.js.map +1 -1
- package/dist/hermes/runtime/hermes-runtime-artifacts.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-backups.d.ts +1 -1
- package/dist/hermes/runtime/hermes-runtime-backups.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-chat.d.ts +2 -1
- package/dist/hermes/{models → runtime}/hermes-runtime-chat.js +127 -27
- package/dist/hermes/runtime/hermes-runtime-chat.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-command-router.d.ts +1 -1
- package/dist/hermes/{models → runtime}/hermes-runtime-command-router.js +3 -0
- package/dist/hermes/runtime/hermes-runtime-command-router.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.d.ts +1 -1
- package/dist/hermes/runtime/hermes-runtime-command-utils.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-cron.d.ts +1 -1
- package/dist/hermes/runtime/hermes-runtime-cron.js.map +1 -0
- package/dist/hermes/runtime/hermes-runtime-history.d.ts +2 -0
- package/dist/hermes/runtime/hermes-runtime-history.js +249 -0
- package/dist/hermes/runtime/hermes-runtime-history.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.d.ts +1 -1
- package/dist/hermes/runtime/hermes-runtime-lifecycle.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-models.d.ts +1 -1
- package/dist/hermes/runtime/hermes-runtime-models.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-process.d.ts +2 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-process.js +19 -2
- package/dist/hermes/runtime/hermes-runtime-process.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-sessions.d.ts +1 -1
- package/dist/hermes/{models → runtime}/hermes-runtime-sessions.js +26 -9
- package/dist/hermes/runtime/hermes-runtime-sessions.js.map +1 -0
- package/dist/hermes/{models → runtime}/hermes-runtime-skills.d.ts +1 -1
- package/dist/hermes/runtime/hermes-runtime-skills.js.map +1 -0
- package/dist/hermes/runtime/hermes-runtime-types.js.map +1 -0
- package/dist/hermes/runtime/hermes-runtime-usage.js.map +1 -0
- package/dist/hermes/runtime/hermes-runtime-values.js.map +1 -0
- package/dist/index.js +28 -3
- package/dist/index.js.map +1 -1
- package/dist/openclaw/backups/backup-manager.js.map +1 -0
- package/dist/{commands → openclaw/config}/provider-config.js +1 -1
- package/dist/openclaw/config/provider-config.js.map +1 -0
- package/dist/openclaw/config/provider-registry.js.map +1 -0
- package/dist/openclaw/gateway-client.js.map +1 -0
- package/dist/{commands → openclaw/handlers}/local-handlers.d.ts +1 -1
- package/dist/{commands → openclaw/handlers}/local-handlers.js +2 -2
- package/dist/openclaw/handlers/local-handlers.js.map +1 -0
- package/dist/{commands → openclaw/handlers}/provider-handlers.d.ts +1 -1
- package/dist/{commands → openclaw/handlers}/provider-handlers.js +3 -3
- package/dist/openclaw/handlers/provider-handlers.js.map +1 -0
- package/dist/openclaw/relay/chat-history.d.ts +51 -0
- package/dist/openclaw/relay/chat-history.js +347 -0
- package/dist/openclaw/relay/chat-history.js.map +1 -0
- package/dist/{relay → openclaw/relay}/chat-send-attachments.js +12 -1
- package/dist/openclaw/relay/chat-send-attachments.js.map +1 -0
- package/dist/{relay → openclaw/relay}/openclaw-voice-input.js +1 -1
- package/dist/openclaw/relay/openclaw-voice-input.js.map +1 -0
- package/dist/openclaw/relay/outgoing-media-relay.d.ts +11 -0
- package/dist/openclaw/relay/outgoing-media-relay.js +120 -0
- package/dist/openclaw/relay/outgoing-media-relay.js.map +1 -0
- package/dist/{relay → openclaw/relay}/session-context.d.ts +6 -0
- package/dist/{relay → openclaw/relay}/session-context.js +42 -2
- package/dist/openclaw/relay/session-context.js.map +1 -0
- package/dist/openclaw/relay/slash-command-catalog.d.ts +2 -0
- package/dist/openclaw/relay/slash-command-catalog.generated.js.map +1 -0
- package/dist/openclaw/relay/slash-command-catalog.js.map +1 -0
- package/dist/openclaw/relay/transcript-dedupe.d.ts +21 -0
- package/dist/openclaw/relay/transcript-dedupe.js +211 -0
- package/dist/openclaw/relay/transcript-dedupe.js.map +1 -0
- package/dist/{relay → openclaw}/relay-manager.d.ts +1 -1
- package/dist/{relay → openclaw}/relay-manager.js +373 -99
- package/dist/openclaw/relay-manager.js.map +1 -0
- package/dist/{commands → openclaw/runtime}/local-runtime.d.ts +1 -17
- package/dist/openclaw/runtime/local-runtime.js.map +1 -0
- package/dist/openclaw/session-store.d.ts +1 -0
- package/dist/openclaw/session-store.js +70 -0
- package/dist/openclaw/session-store.js.map +1 -0
- package/dist/runtime-adapters.js +1 -1
- package/dist/runtime-adapters.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/backup-manager.js.map +0 -1
- package/dist/commands/local-handlers.js.map +0 -1
- package/dist/commands/local-runtime.js.map +0 -1
- package/dist/commands/provider-config.js.map +0 -1
- package/dist/commands/provider-handlers.js.map +0 -1
- package/dist/commands/provider-registry.js.map +0 -1
- package/dist/commands/send-file-utils.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-artifacts.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-backups.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-chat.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-command-router.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-command-utils.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-cron.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-lifecycle.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-models.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-process.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-sessions.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-skills.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-types.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-usage.js.map +0 -1
- package/dist/hermes/models/hermes-runtime-values.js.map +0 -1
- package/dist/relay/attachment-staging.js.map +0 -1
- package/dist/relay/chat-history.d.ts +0 -29
- package/dist/relay/chat-history.js +0 -87
- package/dist/relay/chat-history.js.map +0 -1
- package/dist/relay/chat-payload.js.map +0 -1
- package/dist/relay/chat-send-attachments.js.map +0 -1
- package/dist/relay/gateway-client.js.map +0 -1
- package/dist/relay/mobile-chat-run-bridge.d.ts +0 -93
- package/dist/relay/mobile-chat-run-bridge.js +0 -68
- package/dist/relay/mobile-chat-run-bridge.js.map +0 -1
- package/dist/relay/office-payload.js.map +0 -1
- package/dist/relay/openclaw-voice-input.js.map +0 -1
- package/dist/relay/reconnect.js.map +0 -1
- package/dist/relay/relay-manager.js.map +0 -1
- package/dist/relay/session-context.js.map +0 -1
- package/dist/relay/slash-command-catalog.generated.js.map +0 -1
- package/dist/relay/slash-command-catalog.js.map +0 -1
- package/dist/relay/voice-input.js.map +0 -1
- /package/dist/{relay → core/relay}/attachment-staging.d.ts +0 -0
- /package/dist/{relay → core/relay}/attachment-staging.js +0 -0
- /package/dist/{relay → core/relay}/chat-payload.d.ts +0 -0
- /package/dist/{commands/send-file-utils.d.ts → core/relay/file-upload-utils.d.ts} +0 -0
- /package/dist/{relay → core/relay}/office-payload.d.ts +0 -0
- /package/dist/{relay → core/relay}/office-payload.js +0 -0
- /package/dist/{relay → core/relay}/reconnect.d.ts +0 -0
- /package/dist/{relay → core/relay}/reconnect.js +0 -0
- /package/dist/{relay → core/relay}/voice-input.d.ts +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.d.ts +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-artifacts.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-backups.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-command-utils.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-cron.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-lifecycle.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-models.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-skills.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-types.d.ts +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-types.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-usage.d.ts +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-usage.js +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-values.d.ts +0 -0
- /package/dist/hermes/{models → runtime}/hermes-runtime-values.js +0 -0
- /package/dist/{commands → openclaw/backups}/backup-manager.d.ts +0 -0
- /package/dist/{commands → openclaw/backups}/backup-manager.js +0 -0
- /package/dist/{commands → openclaw/config}/provider-config.d.ts +0 -0
- /package/dist/{commands → openclaw/config}/provider-registry.d.ts +0 -0
- /package/dist/{commands → openclaw/config}/provider-registry.js +0 -0
- /package/dist/{relay → openclaw}/gateway-client.d.ts +0 -0
- /package/dist/{relay → openclaw}/gateway-client.js +0 -0
- /package/dist/{relay → openclaw/relay}/chat-send-attachments.d.ts +0 -0
- /package/dist/{relay → openclaw/relay}/openclaw-voice-input.d.ts +0 -0
- /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.d.ts +0 -0
- /package/dist/{relay → openclaw/relay}/slash-command-catalog.generated.js +0 -0
- /package/dist/{relay → openclaw/relay}/slash-command-catalog.js +0 -0
- /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
|
-
- `
|
|
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
|
-
|
|
150
|
+
CLAWCONNECT_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
|
|
142
151
|
```
|
|
143
152
|
|
|
144
|
-
If `OPENCLAW_ASR_COMMAND` is
|
|
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`
|
|
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/
|
|
308
|
-
- `src/
|
|
309
|
-
- `src/
|
|
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()`
|
|
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
|
-
- `
|
|
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
|
-
|
|
159
|
+
CLAWCONNECT_ASR_COMMAND='/usr/local/bin/transcribe-audio {file} {language}' clawconnect run
|
|
151
160
|
```
|
|
152
161
|
|
|
153
|
-
未配置 `OPENCLAW_ASR_COMMAND`
|
|
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/
|
|
323
|
-
- `src/
|
|
324
|
-
- `src/
|
|
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
|
## 工作原理
|
package/dist/commands/pair.d.ts
CHANGED
|
@@ -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 {};
|
package/dist/commands/pair.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
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 "
|
|
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
|
-
|
|
23
|
+
const requestedRelayServerUrl = opts.server ?? getDefaultRelayServerUrl();
|
|
24
|
+
const canReuseExistingConfig = shouldReuseExistingPairing(existingConfig, gatewayType, requestedRelayServerUrl);
|
|
25
|
+
if (existingConfig && canReuseExistingConfig) {
|
|
22
26
|
const config = existingConfig;
|
|
23
|
-
relayServerUrl =
|
|
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
|
-
|
|
50
|
-
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/run.js
CHANGED
|
@@ -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() {
|
package/dist/commands/run.js.map
CHANGED
|
@@ -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,
|
|
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
|
|
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>;
|