clawconnect-agent 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +83 -7
  2. package/README.zh-CN.md +93 -17
  3. package/dist/commands/install.js +10 -4
  4. package/dist/commands/install.js.map +1 -1
  5. package/dist/commands/local-handlers.js +0 -28
  6. package/dist/commands/local-handlers.js.map +1 -1
  7. package/dist/commands/pair.d.ts +2 -0
  8. package/dist/commands/pair.js +17 -6
  9. package/dist/commands/pair.js.map +1 -1
  10. package/dist/commands/run.js +13 -16
  11. package/dist/commands/run.js.map +1 -1
  12. package/dist/commands/send-file.d.ts +2 -0
  13. package/dist/commands/send-file.js +6 -0
  14. package/dist/commands/send-file.js.map +1 -1
  15. package/dist/commands/status.d.ts +13 -1
  16. package/dist/commands/status.js +58 -15
  17. package/dist/commands/status.js.map +1 -1
  18. package/dist/config/config.d.ts +6 -11
  19. package/dist/config/config.js +19 -48
  20. package/dist/config/config.js.map +1 -1
  21. package/dist/config/env.d.ts +1 -1
  22. package/dist/config/env.js +4 -5
  23. package/dist/config/env.js.map +1 -1
  24. package/dist/config/profile.d.ts +11 -0
  25. package/dist/config/profile.js +80 -0
  26. package/dist/config/profile.js.map +1 -0
  27. package/dist/gateway-profiles.d.ts +8 -0
  28. package/dist/gateway-profiles.js +24 -0
  29. package/dist/gateway-profiles.js.map +1 -0
  30. package/dist/hermes/hermes-relay-manager.d.ts +49 -0
  31. package/dist/hermes/hermes-relay-manager.js +636 -0
  32. package/dist/hermes/hermes-relay-manager.js.map +1 -0
  33. package/dist/hermes/hermes-runtime.d.ts +8 -0
  34. package/dist/hermes/hermes-runtime.js +8 -0
  35. package/dist/hermes/hermes-runtime.js.map +1 -0
  36. package/dist/hermes/hermes-session-store.d.ts +15 -0
  37. package/dist/hermes/hermes-session-store.js +152 -0
  38. package/dist/hermes/hermes-session-store.js.map +1 -0
  39. package/dist/hermes/hermes-voice-input.d.ts +13 -0
  40. package/dist/hermes/hermes-voice-input.js +27 -0
  41. package/dist/hermes/hermes-voice-input.js.map +1 -0
  42. package/dist/hermes/models/hermes-runtime-artifacts.d.ts +3 -0
  43. package/dist/hermes/models/hermes-runtime-artifacts.js +65 -0
  44. package/dist/hermes/models/hermes-runtime-artifacts.js.map +1 -0
  45. package/dist/hermes/models/hermes-runtime-backups.d.ts +5 -0
  46. package/dist/hermes/models/hermes-runtime-backups.js +128 -0
  47. package/dist/hermes/models/hermes-runtime-backups.js.map +1 -0
  48. package/dist/hermes/models/hermes-runtime-chat.d.ts +40 -0
  49. package/dist/hermes/models/hermes-runtime-chat.js +623 -0
  50. package/dist/hermes/models/hermes-runtime-chat.js.map +1 -0
  51. package/dist/hermes/models/hermes-runtime-command-router.d.ts +2 -0
  52. package/dist/hermes/models/hermes-runtime-command-router.js +93 -0
  53. package/dist/hermes/models/hermes-runtime-command-router.js.map +1 -0
  54. package/dist/hermes/models/hermes-runtime-command-utils.d.ts +3 -0
  55. package/dist/hermes/models/hermes-runtime-command-utils.js +19 -0
  56. package/dist/hermes/models/hermes-runtime-command-utils.js.map +1 -0
  57. package/dist/hermes/models/hermes-runtime-cron.d.ts +11 -0
  58. package/dist/hermes/models/hermes-runtime-cron.js +301 -0
  59. package/dist/hermes/models/hermes-runtime-cron.js.map +1 -0
  60. package/dist/hermes/models/hermes-runtime-lifecycle.d.ts +9 -0
  61. package/dist/hermes/models/hermes-runtime-lifecycle.js +111 -0
  62. package/dist/hermes/models/hermes-runtime-lifecycle.js.map +1 -0
  63. package/dist/hermes/models/hermes-runtime-models.d.ts +29 -0
  64. package/dist/hermes/models/hermes-runtime-models.js +125 -0
  65. package/dist/hermes/models/hermes-runtime-models.js.map +1 -0
  66. package/dist/hermes/models/hermes-runtime-process.d.ts +22 -0
  67. package/dist/hermes/models/hermes-runtime-process.js +130 -0
  68. package/dist/hermes/models/hermes-runtime-process.js.map +1 -0
  69. package/dist/hermes/models/hermes-runtime-sessions.d.ts +5 -0
  70. package/dist/hermes/models/hermes-runtime-sessions.js +71 -0
  71. package/dist/hermes/models/hermes-runtime-sessions.js.map +1 -0
  72. package/dist/hermes/models/hermes-runtime-skills.d.ts +13 -0
  73. package/dist/hermes/models/hermes-runtime-skills.js +322 -0
  74. package/dist/hermes/models/hermes-runtime-skills.js.map +1 -0
  75. package/dist/hermes/models/hermes-runtime-types.d.ts +19 -0
  76. package/dist/hermes/models/hermes-runtime-types.js +2 -0
  77. package/dist/hermes/models/hermes-runtime-types.js.map +1 -0
  78. package/dist/hermes/models/hermes-runtime-usage.d.ts +22 -0
  79. package/dist/hermes/models/hermes-runtime-usage.js +211 -0
  80. package/dist/hermes/models/hermes-runtime-usage.js.map +1 -0
  81. package/dist/hermes/models/hermes-runtime-values.d.ts +14 -0
  82. package/dist/hermes/models/hermes-runtime-values.js +105 -0
  83. package/dist/hermes/models/hermes-runtime-values.js.map +1 -0
  84. package/dist/i18n/index.js +4 -0
  85. package/dist/i18n/index.js.map +1 -1
  86. package/dist/index.js +115 -9
  87. package/dist/index.js.map +1 -1
  88. package/dist/platform/service-manager-common.d.ts +5 -2
  89. package/dist/platform/service-manager-common.js +18 -7
  90. package/dist/platform/service-manager-common.js.map +1 -1
  91. package/dist/platform/service-manager.d.ts +16 -5
  92. package/dist/platform/service-manager.js +85 -50
  93. package/dist/platform/service-manager.js.map +1 -1
  94. package/dist/relay/chat-history.js +18 -0
  95. package/dist/relay/chat-history.js.map +1 -1
  96. package/dist/relay/gateway-client.js +4 -3
  97. package/dist/relay/gateway-client.js.map +1 -1
  98. package/dist/relay/mobile-chat-run-bridge.d.ts +93 -0
  99. package/dist/relay/mobile-chat-run-bridge.js +68 -0
  100. package/dist/relay/mobile-chat-run-bridge.js.map +1 -0
  101. package/dist/relay/openclaw-voice-input.d.ts +13 -0
  102. package/dist/relay/openclaw-voice-input.js +18 -0
  103. package/dist/relay/openclaw-voice-input.js.map +1 -0
  104. package/dist/relay/relay-manager.d.ts +0 -3
  105. package/dist/relay/relay-manager.js +39 -170
  106. package/dist/relay/relay-manager.js.map +1 -1
  107. package/dist/relay/session-context.js +11 -1
  108. package/dist/relay/session-context.js.map +1 -1
  109. package/dist/relay/slash-command-catalog.d.ts +1 -1
  110. package/dist/relay/slash-command-catalog.generated.d.ts +0 -5
  111. package/dist/relay/slash-command-catalog.generated.js +0 -6
  112. package/dist/relay/slash-command-catalog.generated.js.map +1 -1
  113. package/dist/relay/voice-input.d.ts +11 -0
  114. package/dist/relay/voice-input.js +118 -0
  115. package/dist/relay/voice-input.js.map +1 -0
  116. package/dist/runtime-adapters.d.ts +19 -0
  117. package/dist/runtime-adapters.js +39 -0
  118. package/dist/runtime-adapters.js.map +1 -0
  119. package/package.json +3 -3
  120. package/dist/commands/voice-reply.d.ts +0 -39
  121. package/dist/commands/voice-reply.js +0 -329
  122. package/dist/commands/voice-reply.js.map +0 -1
  123. package/dist/relay/voice-reply-preference.d.ts +0 -25
  124. package/dist/relay/voice-reply-preference.js +0 -103
  125. package/dist/relay/voice-reply-preference.js.map +0 -1
@@ -0,0 +1,636 @@
1
+ import { statSync } from "fs";
2
+ import { WebSocket } from "ws";
3
+ import { sendFileCommand } from "../commands/send-file.js";
4
+ import { buildOfficeEventPayload } from "../relay/office-payload.js";
5
+ import { buildMobileAssistantErrorPayload, buildMobileAssistantFinalPayload, resolveMobileChatRun, } from "../relay/mobile-chat-run-bridge.js";
6
+ import { voiceInputSetupMessage } from "../relay/voice-input.js";
7
+ import { gatewayCapabilitiesForType } from "../gateway-profiles.js";
8
+ import { runHermesPython } from "./models/hermes-runtime-process.js";
9
+ import { prepareHermesVoiceInputCommand, resolveHermesVoiceInputSessionKey } from "./hermes-voice-input.js";
10
+ import { collectHermesUsageSnapshot, handleHermesCommand, readHermesStatusSnapshot, runHermesChat, } from "./hermes-runtime.js";
11
+ ;
12
+ const HERMES_SLASH_COMMAND_CATALOG_SCRIPT = String.raw `
13
+ import json
14
+
15
+ items = []
16
+
17
+ def add(command, title=None, detail=None):
18
+ if not command:
19
+ return
20
+ command = str(command).strip()
21
+ if not command:
22
+ return
23
+ if not command.startswith("/"):
24
+ command = "/" + command
25
+ title = str(title or command.lstrip("/") or command).strip()
26
+ detail = str(detail or title or command).strip()
27
+ items.append({"command": command, "title": title, "detail": detail})
28
+
29
+ try:
30
+ from hermes_cli.commands import COMMANDS
31
+ for command, detail in COMMANDS.items():
32
+ add(command, command.lstrip("/"), detail)
33
+ except Exception:
34
+ pass
35
+
36
+ try:
37
+ from agent.skill_commands import get_skill_commands
38
+ for command, info in get_skill_commands().items():
39
+ if not isinstance(info, dict):
40
+ info = {}
41
+ add(command, info.get("name") or str(command).lstrip("/"), info.get("description") or "Skill command")
42
+ except Exception:
43
+ pass
44
+
45
+ try:
46
+ from hermes_cli.plugins import get_plugin_commands
47
+ for command, info in get_plugin_commands().items():
48
+ if not isinstance(info, dict):
49
+ info = {}
50
+ add(command, command, info.get("description") or "Plugin command")
51
+ except Exception:
52
+ pass
53
+
54
+ print(json.dumps(items, ensure_ascii=False))
55
+ `;
56
+ const DEFAULT_HERMES_SLASH_COMMAND_SEARCH_LIMIT = 16;
57
+ const MAX_HERMES_SLASH_COMMAND_SEARCH_LIMIT = 50;
58
+ const MAX_HERMES_SLASH_COMMAND_SEARCH_OFFSET = 10_000;
59
+ let hermesSlashCommandCatalogCache;
60
+ export function collectHermesSlashCommandCatalog(runPython = runHermesPython) {
61
+ try {
62
+ return parseHermesSlashCommandCatalog(runPython(HERMES_SLASH_COMMAND_CATALOG_SCRIPT));
63
+ }
64
+ catch (error) {
65
+ const message = error instanceof Error ? error.message : String(error);
66
+ console.warn(`[hermes-relay] failed to load Hermes slash command catalog: ${message}`);
67
+ return [];
68
+ }
69
+ }
70
+ export function searchHermesSlashCommandCatalog(opts = {}) {
71
+ const query = normalizeHermesSlashCommandQuery(opts.query);
72
+ const limit = normalizeHermesSlashCommandSearchLimit(opts.limit);
73
+ const offset = normalizeHermesSlashCommandSearchOffset(opts.offset);
74
+ const catalog = [...(opts.collect ?? getCachedHermesSlashCommandCatalog)()];
75
+ const matches = catalog
76
+ .map((command, index) => {
77
+ const rank = hermesSlashCommandMatchRank(command, query);
78
+ return rank === undefined ? undefined : { command, index, rank };
79
+ })
80
+ .filter((entry) => entry !== undefined)
81
+ .sort((left, right) => {
82
+ if (left.rank !== right.rank)
83
+ return left.rank - right.rank;
84
+ if (left.index !== right.index)
85
+ return left.index - right.index;
86
+ return left.command.title.localeCompare(right.command.title);
87
+ });
88
+ const items = matches.slice(offset, offset + limit).map((entry) => entry.command);
89
+ const nextOffset = offset + items.length;
90
+ const hasMore = nextOffset < matches.length;
91
+ return {
92
+ items,
93
+ hasMore,
94
+ ...(hasMore ? { nextOffset } : {}),
95
+ total: matches.length,
96
+ };
97
+ }
98
+ export function buildHermesRelayHelloMessage(opts) {
99
+ return {
100
+ type: "hello",
101
+ platform: opts.platform,
102
+ agentVersion: opts.agentVersion,
103
+ capabilities: opts.capabilities,
104
+ ...(opts.slashCommands && opts.slashCommands.length > 0 ? { slashCommands: opts.slashCommands } : {}),
105
+ };
106
+ }
107
+ function parseHermesSlashCommandCatalog(rawOutput) {
108
+ const rawValue = JSON.parse(rawOutput);
109
+ if (!Array.isArray(rawValue)) {
110
+ return [];
111
+ }
112
+ const commands = [];
113
+ const seen = new Set();
114
+ for (const entry of rawValue) {
115
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
116
+ continue;
117
+ }
118
+ const record = entry;
119
+ const command = normalizeHermesSlashCommandText(record.command ?? record.name ?? record.value ?? record.text);
120
+ if (!command) {
121
+ continue;
122
+ }
123
+ const key = command.toLowerCase();
124
+ if (seen.has(key)) {
125
+ continue;
126
+ }
127
+ seen.add(key);
128
+ const title = readHermesSlashCommandLabel(record.title ?? record.label ?? record.name) ?? command.replace(/^\//, "");
129
+ const detail = readHermesSlashCommandLabel(record.detail ?? record.description ?? record.summary) ?? title;
130
+ commands.push({
131
+ source: "Hermes",
132
+ command,
133
+ title,
134
+ detail,
135
+ });
136
+ }
137
+ return commands;
138
+ }
139
+ function normalizeHermesSlashCommandText(value) {
140
+ if (typeof value !== "string") {
141
+ return undefined;
142
+ }
143
+ const trimmed = value.trim().replace(/\s+/g, " ");
144
+ if (!trimmed) {
145
+ return undefined;
146
+ }
147
+ return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
148
+ }
149
+ function readHermesSlashCommandLabel(value) {
150
+ if (typeof value !== "string") {
151
+ return undefined;
152
+ }
153
+ const trimmed = value.trim().replace(/\s+/g, " ");
154
+ return trimmed || undefined;
155
+ }
156
+ function getCachedHermesSlashCommandCatalog() {
157
+ if (!hermesSlashCommandCatalogCache) {
158
+ hermesSlashCommandCatalogCache = collectHermesSlashCommandCatalog();
159
+ }
160
+ return hermesSlashCommandCatalogCache;
161
+ }
162
+ function normalizeHermesSlashCommandQuery(value) {
163
+ if (typeof value !== "string") {
164
+ return "/";
165
+ }
166
+ const trimmed = value.trim().replace(/\s+/g, " ").toLowerCase();
167
+ if (!trimmed) {
168
+ return "/";
169
+ }
170
+ return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
171
+ }
172
+ function normalizeHermesSlashCommandSearchLimit(value) {
173
+ if (typeof value === "number" && Number.isFinite(value)) {
174
+ return Math.max(1, Math.min(MAX_HERMES_SLASH_COMMAND_SEARCH_LIMIT, Math.trunc(value)));
175
+ }
176
+ if (typeof value === "string" && value.trim()) {
177
+ const parsed = Number(value);
178
+ if (Number.isFinite(parsed)) {
179
+ return Math.max(1, Math.min(MAX_HERMES_SLASH_COMMAND_SEARCH_LIMIT, Math.trunc(parsed)));
180
+ }
181
+ }
182
+ return DEFAULT_HERMES_SLASH_COMMAND_SEARCH_LIMIT;
183
+ }
184
+ function normalizeHermesSlashCommandSearchOffset(value) {
185
+ if (typeof value === "number" && Number.isFinite(value)) {
186
+ return Math.max(0, Math.min(MAX_HERMES_SLASH_COMMAND_SEARCH_OFFSET, Math.trunc(value)));
187
+ }
188
+ if (typeof value === "string" && value.trim()) {
189
+ const parsed = Number(value);
190
+ if (Number.isFinite(parsed)) {
191
+ return Math.max(0, Math.min(MAX_HERMES_SLASH_COMMAND_SEARCH_OFFSET, Math.trunc(parsed)));
192
+ }
193
+ }
194
+ return 0;
195
+ }
196
+ function hermesSlashCommandMatchRank(command, query) {
197
+ const normalizedCommand = command.command.trim().replace(/\s+/g, " ").toLowerCase();
198
+ if (!normalizedCommand) {
199
+ return undefined;
200
+ }
201
+ if (query === "/")
202
+ return 0;
203
+ if (normalizedCommand === query) {
204
+ return 0;
205
+ }
206
+ if (normalizedCommand.startsWith(query)) {
207
+ return 1;
208
+ }
209
+ if (query.startsWith(normalizedCommand)) {
210
+ return 2;
211
+ }
212
+ const compactCommand = compactSlashSearchText(normalizedCommand);
213
+ const compactQuery = compactSlashSearchText(query);
214
+ if (!compactQuery)
215
+ return 0;
216
+ if (compactCommand.includes(compactQuery)) {
217
+ return 3;
218
+ }
219
+ if (isSubsequence(compactQuery, compactCommand)) {
220
+ return 4;
221
+ }
222
+ const searchableText = [command.title, command.detail]
223
+ .map((value) => compactSlashSearchText(value))
224
+ .filter(Boolean)
225
+ .join(" ");
226
+ if (searchableText.includes(compactQuery)) {
227
+ return 5;
228
+ }
229
+ if (isSubsequence(compactQuery, searchableText)) {
230
+ return 6;
231
+ }
232
+ return undefined;
233
+ }
234
+ function compactSlashSearchText(value) {
235
+ return value
236
+ .trim()
237
+ .replace(/^\//, "")
238
+ .replace(/\s+/g, "")
239
+ .toLowerCase();
240
+ }
241
+ function isSubsequence(needle, haystack) {
242
+ if (!needle)
243
+ return true;
244
+ let needleIndex = 0;
245
+ for (const char of haystack) {
246
+ if (char === needle[needleIndex]) {
247
+ needleIndex += 1;
248
+ if (needleIndex === needle.length) {
249
+ return true;
250
+ }
251
+ }
252
+ }
253
+ return false;
254
+ }
255
+ function readHermesSlashCommandSearchParams(params) {
256
+ if (!params || typeof params !== "object" || Array.isArray(params)) {
257
+ return {};
258
+ }
259
+ const record = params;
260
+ return {
261
+ query: record.query,
262
+ limit: record.limit,
263
+ offset: record.offset,
264
+ };
265
+ }
266
+ export async function runHermesRelayManager(opts) {
267
+ const wsUrl = buildRelayUrl(opts.relayServerUrl, opts.gatewayId, opts.relaySecret);
268
+ const recentMobileFiles = new Map();
269
+ const sentArtifacts = new Map();
270
+ return new Promise((resolve) => {
271
+ let relayWs;
272
+ try {
273
+ relayWs = new WebSocket(wsUrl);
274
+ }
275
+ catch (error) {
276
+ console.error("Failed to create Hermes relay WebSocket:", error);
277
+ resolve(true);
278
+ return;
279
+ }
280
+ if (opts.signal) {
281
+ if (opts.signal.aborted) {
282
+ relayWs.close(1001, "shutdown");
283
+ }
284
+ else {
285
+ opts.signal.addEventListener("abort", () => relayWs.close(1001, "shutdown"), { once: true });
286
+ }
287
+ }
288
+ const send = (message) => {
289
+ if (relayWs.readyState === WebSocket.OPEN) {
290
+ relayWs.send(JSON.stringify(message));
291
+ }
292
+ };
293
+ relayWs.on("open", () => {
294
+ console.log(`Connected to relay server (hermes gatewayId=${opts.gatewayId})`);
295
+ opts.onConnected?.();
296
+ const statusSnapshot = readHermesStatusSnapshot();
297
+ send(buildHermesRelayHelloMessage({
298
+ platform: `${process.platform} (Hermes)`,
299
+ agentVersion: "hermes",
300
+ capabilities: opts.capabilities ?? [...gatewayCapabilitiesForType("hermes"), "models"],
301
+ }));
302
+ send({ type: "gateway_connected" });
303
+ send({
304
+ type: "event",
305
+ event: "office",
306
+ payload: {
307
+ currentModel: statusSnapshot.currentModel,
308
+ provider: statusSnapshot.provider,
309
+ office: {
310
+ kind: "idle",
311
+ title: "Hermes Agent",
312
+ detail: opts.displayName ?? "Hermes gateway connected",
313
+ phase: "connected",
314
+ updatedAt: new Date().toISOString(),
315
+ },
316
+ },
317
+ });
318
+ void publishHermesUsageSnapshot(send);
319
+ });
320
+ relayWs.on("message", async (raw) => {
321
+ let requestId;
322
+ let methodForLog = "";
323
+ let acknowledgedChatRun;
324
+ let voiceInputRun;
325
+ try {
326
+ let msg;
327
+ try {
328
+ msg = JSON.parse(raw.toString());
329
+ }
330
+ catch {
331
+ return;
332
+ }
333
+ if (msg.type === "heartbeat") {
334
+ send({ type: "heartbeat" });
335
+ return;
336
+ }
337
+ if (msg.type === "hello") {
338
+ return;
339
+ }
340
+ if (msg.type === "event") {
341
+ if (msg.event === "file") {
342
+ await rememberMobileFileEvent(msg.payload, recentMobileFiles, opts);
343
+ }
344
+ return;
345
+ }
346
+ if (msg.type !== "cmd" || !msg.method) {
347
+ return;
348
+ }
349
+ requestId = msg.id;
350
+ methodForLog = msg.method;
351
+ if (msg.method === "slash_commands.search") {
352
+ if (requestId) {
353
+ send({
354
+ type: "res",
355
+ id: requestId,
356
+ ok: true,
357
+ payload: searchHermesSlashCommandCatalog(readHermesSlashCommandSearchParams(msg.params)),
358
+ });
359
+ }
360
+ return;
361
+ }
362
+ const localResult = await handleHermesCommand(msg.method, msg.params, {
363
+ requestId,
364
+ gatewayId: opts.gatewayId,
365
+ publishEvent: (event) => send(event),
366
+ });
367
+ if (localResult !== null) {
368
+ if (requestId) {
369
+ send(localResult.ok
370
+ ? { type: "res", id: requestId, ok: true, payload: localResult.payload }
371
+ : { type: "res", id: requestId, ok: false, error: { message: localResult.error } });
372
+ }
373
+ return;
374
+ }
375
+ if (msg.method === "chat.voice.send" || msg.method === "hermes.voice.send") {
376
+ const voiceInput = await prepareHermesVoiceInputCommand(msg.params, { requestId });
377
+ voiceInputRun = voiceInput.run;
378
+ msg.params = voiceInput.params;
379
+ msg.method = voiceInput.method;
380
+ }
381
+ if (msg.method !== "chat.send" && msg.method !== "agent" && msg.method !== "hermes.chat.send") {
382
+ throw new Error(`Unsupported Hermes command: ${msg.method}`);
383
+ }
384
+ const requestedSessionKey = resolveHermesRelaySessionKey(msg.params);
385
+ const run = resolveMobileChatRun({
386
+ preferredRunId: voiceInputRun?.runId,
387
+ requestId,
388
+ sessionKey: requestedSessionKey,
389
+ fallbackPrefix: "hermes",
390
+ });
391
+ const runId = run.runId;
392
+ const sessionKey = run.sessionKey;
393
+ if (requestId) {
394
+ acknowledgedChatRun = { runId, sessionKey };
395
+ send({ type: "res", id: requestId, ok: true, payload: acknowledgedChatRun });
396
+ }
397
+ const paramsWithFiles = await attachRecentMobileFiles(msg.params, recentMobileFiles, opts);
398
+ const chat = await runHermesChat(paramsWithFiles, {
399
+ requestId: runId,
400
+ gatewayId: opts.gatewayId,
401
+ publishEvent: (event) => {
402
+ send(event);
403
+ publishHermesOfficeSnapshot(send, event.event, event.payload);
404
+ },
405
+ });
406
+ const finalChatPayload = buildMobileAssistantFinalPayload({
407
+ run: { runId, sessionKey: chat.sessionKey },
408
+ text: chat.output,
409
+ currentModel: chat.usage?.currentModel,
410
+ provider: chat.usage?.provider,
411
+ contextUsage: chat.usage?.contextUsage,
412
+ contextLimit: chat.usage?.contextLimit,
413
+ });
414
+ send({
415
+ type: "event",
416
+ event: "chat",
417
+ payload: finalChatPayload,
418
+ });
419
+ publishHermesOfficeSnapshot(send, "chat", finalChatPayload);
420
+ for (const artifactPath of chat.artifactPaths) {
421
+ const artifactKey = artifactDeliveryKey(chat.sessionKey, artifactPath);
422
+ pruneSentArtifacts(sentArtifacts);
423
+ if (artifactKey && sentArtifacts.has(artifactKey)) {
424
+ continue;
425
+ }
426
+ await sendFileCommand(buildHermesArtifactSendOptions({
427
+ artifactPath,
428
+ gatewayId: opts.gatewayId,
429
+ sessionKey: chat.sessionKey,
430
+ runId,
431
+ }), {
432
+ stdout: { write: () => true },
433
+ stderr: { write: (chunk) => {
434
+ const text = String(chunk).trim();
435
+ if (text)
436
+ console.log(text);
437
+ return true;
438
+ } },
439
+ });
440
+ if (artifactKey) {
441
+ sentArtifacts.set(artifactKey, Date.now());
442
+ }
443
+ }
444
+ if (requestId && !acknowledgedChatRun) {
445
+ send({ type: "res", id: requestId, ok: true, payload: { runId, sessionKey: chat.sessionKey } });
446
+ }
447
+ }
448
+ catch (error) {
449
+ const message = error instanceof Error ? error.message : String(error);
450
+ console.error(`[hermes-relay] cmd failed method=${methodForLog || "(unknown)"} id=${requestId ?? "(no-id)"}: ${message}`);
451
+ const setupMessage = voiceInputSetupMessage(error);
452
+ const chatRun = setupMessage ? (acknowledgedChatRun ?? voiceInputRun) : acknowledgedChatRun;
453
+ if (chatRun) {
454
+ const errorPayload = buildMobileAssistantErrorPayload({
455
+ run: chatRun,
456
+ errorMessage: setupMessage ?? message,
457
+ });
458
+ send({
459
+ type: "event",
460
+ event: "chat",
461
+ payload: errorPayload,
462
+ });
463
+ publishHermesOfficeSnapshot(send, "chat", errorPayload);
464
+ if (setupMessage && requestId && !acknowledgedChatRun) {
465
+ send({ type: "res", id: requestId, ok: true, payload: chatRun });
466
+ }
467
+ }
468
+ else if (requestId) {
469
+ send({ type: "res", id: requestId, ok: false, error: { message } });
470
+ }
471
+ }
472
+ });
473
+ relayWs.on("close", (code, reason) => {
474
+ console.log(`Hermes relay connection closed: ${code} ${reason.toString()}`);
475
+ opts.onDisconnected?.();
476
+ const intentional = opts.signal?.aborted || code === 4000;
477
+ resolve(!intentional);
478
+ });
479
+ relayWs.on("error", (error) => {
480
+ console.error("Hermes relay WebSocket error:", error.message);
481
+ });
482
+ });
483
+ }
484
+ export function buildHermesArtifactSendOptions(params) {
485
+ return {
486
+ filePath: params.artifactPath,
487
+ gateway: params.gatewayId,
488
+ session: params.sessionKey,
489
+ json: true,
490
+ sourceRunId: params.runId,
491
+ };
492
+ }
493
+ export function shouldPublishHermesOfficeSnapshot(eventName, payload) {
494
+ if (eventName !== "chat" && eventName !== "agent" && eventName !== "context_usage") {
495
+ return false;
496
+ }
497
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
498
+ return false;
499
+ }
500
+ const state = typeof payload.state === "string"
501
+ ? payload.state.trim().toLowerCase()
502
+ : "";
503
+ return state !== "delta";
504
+ }
505
+ function publishHermesOfficeSnapshot(send, eventName, payload) {
506
+ if (!shouldPublishHermesOfficeSnapshot(eventName, payload)) {
507
+ return;
508
+ }
509
+ if (!eventName) {
510
+ return;
511
+ }
512
+ const officePayload = buildOfficeEventPayload(eventName, payload, () => new Date().toISOString());
513
+ if (!officePayload) {
514
+ return;
515
+ }
516
+ send({ type: "event", event: "office", payload: officePayload });
517
+ }
518
+ function artifactDeliveryKey(sessionKey, filePath) {
519
+ try {
520
+ const stat = statSync(filePath);
521
+ return [
522
+ sessionKey,
523
+ filePath,
524
+ stat.size,
525
+ Math.floor(stat.mtimeMs),
526
+ ].join("\0");
527
+ }
528
+ catch {
529
+ return undefined;
530
+ }
531
+ }
532
+ function pruneSentArtifacts(sentArtifacts) {
533
+ const cutoff = Date.now() - 30 * 60_000;
534
+ for (const [key, timestamp] of sentArtifacts) {
535
+ if (timestamp < cutoff) {
536
+ sentArtifacts.delete(key);
537
+ }
538
+ }
539
+ }
540
+ async function publishHermesUsageSnapshot(send) {
541
+ try {
542
+ const snapshot = await collectHermesUsageSnapshot();
543
+ if (!snapshot.currentModel && snapshot.contextUsage === undefined && snapshot.contextLimit === undefined) {
544
+ return;
545
+ }
546
+ send({
547
+ type: "event",
548
+ event: "context_usage",
549
+ payload: {
550
+ currentModel: snapshot.currentModel,
551
+ provider: snapshot.provider,
552
+ contextUsage: snapshot.contextUsage,
553
+ contextLimit: snapshot.contextLimit,
554
+ hermesSessionId: snapshot.hermesSessionId,
555
+ updatedAt: new Date().toISOString(),
556
+ },
557
+ });
558
+ }
559
+ catch (error) {
560
+ const message = error instanceof Error ? error.message : String(error);
561
+ console.warn(`[hermes-relay] usage snapshot failed: ${message}`);
562
+ }
563
+ }
564
+ function buildRelayUrl(serverUrl, gatewayId, relaySecret) {
565
+ const base = serverUrl.replace(/\/+$/, "").replace(/^http/, "ws");
566
+ return `${base}/relay/${gatewayId}?secret=${encodeURIComponent(relaySecret)}`;
567
+ }
568
+ async function rememberMobileFileEvent(payload, recentMobileFiles, opts) {
569
+ const block = extractFileBlock(payload);
570
+ if (!block || block.origin !== "mobile") {
571
+ return;
572
+ }
573
+ const sessionKey = typeof block.sessionKey === "string" && block.sessionKey.trim() ? block.sessionKey.trim() : "main";
574
+ const downloadUrl = typeof block.downloadUrl === "string" ? block.downloadUrl : "";
575
+ const fileName = typeof block.fileName === "string" ? block.fileName : typeof block.name === "string" ? block.name : "attachment";
576
+ if (!downloadUrl) {
577
+ return;
578
+ }
579
+ const content = await downloadFileAsBase64(downloadUrl, opts);
580
+ const attachments = recentMobileFiles.get(sessionKey) ?? [];
581
+ attachments.push({
582
+ fileName,
583
+ mimeType: typeof block.mimeType === "string" ? block.mimeType : "application/octet-stream",
584
+ content,
585
+ });
586
+ recentMobileFiles.set(sessionKey, attachments.slice(-12));
587
+ }
588
+ async function attachRecentMobileFiles(params, recentMobileFiles, opts) {
589
+ const record = params && typeof params === "object" && !Array.isArray(params)
590
+ ? { ...params }
591
+ : {};
592
+ const sessionKey = typeof record.sessionKey === "string" && record.sessionKey.trim() ? record.sessionKey.trim() : "main";
593
+ const pending = recentMobileFiles.get(sessionKey) ?? [];
594
+ if (pending.length === 0) {
595
+ return params;
596
+ }
597
+ const existing = Array.isArray(record.attachments) ? record.attachments : [];
598
+ recentMobileFiles.delete(sessionKey);
599
+ if (existing.length > 0) {
600
+ return record;
601
+ }
602
+ return {
603
+ ...record,
604
+ attachments: pending,
605
+ };
606
+ }
607
+ function resolveHermesRelaySessionKey(params) {
608
+ return resolveHermesVoiceInputSessionKey(params);
609
+ }
610
+ function extractFileBlock(payload) {
611
+ const record = payload && typeof payload === "object" && !Array.isArray(payload)
612
+ ? payload
613
+ : undefined;
614
+ const content = record?.message && typeof record.message === "object" && !Array.isArray(record.message)
615
+ ? record.message.content
616
+ : undefined;
617
+ const blocks = Array.isArray(content) ? content : [];
618
+ return blocks.find((block) => {
619
+ if (!block || typeof block !== "object" || Array.isArray(block)) {
620
+ return false;
621
+ }
622
+ const type = block.type;
623
+ return type === "file" || type === "voice";
624
+ });
625
+ }
626
+ async function downloadFileAsBase64(downloadUrl, opts) {
627
+ const url = new URL(downloadUrl, opts.relayServerUrl);
628
+ url.searchParams.set("secret", opts.relaySecret);
629
+ const response = await fetch(url);
630
+ if (!response.ok) {
631
+ throw new Error(`file_download_failed:${response.status}`);
632
+ }
633
+ const buffer = Buffer.from(await response.arrayBuffer());
634
+ return buffer.toString("base64");
635
+ }
636
+ //# sourceMappingURL=hermes-relay-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-relay-manager.js","sourceRoot":"","sources":["../../src/hermes/hermes-relay-manager.ts"],"names":[],"mappings":"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"}