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,623 @@
1
+ import { randomUUID } from "crypto";
2
+ import { readFileSync, statSync } from "fs";
3
+ import { mkdir, writeFile } from "fs/promises";
4
+ import { join } from "path";
5
+ import { spawn } from "child_process";
6
+ import { buildMobileAssistantDeltaPayload, buildMobileAssistantStreamingPayload, } from "../../relay/mobile-chat-run-bridge.js";
7
+ import { forgetHermesSession, getMappedHermesSessionId, rememberHermesSession, } from "../hermes-session-store.js";
8
+ import { extractDeliverablePaths } from "./hermes-runtime-artifacts.js";
9
+ import { CHAT_TIMEOUT_MS, CLAWCONNECT_MOBILE_BRIDGE_HINT, HERMES_AGENT_LOG_FILE, HERMES_INBOX_DIR, HERMES_TYPING_MARKER, SUBPROCESS_ENV, resolveHermesBin, runHermes, runHermesPython, sanitizeHermesChatOutput, stripAnsi, stripHermesSessionResumeNotices, } from "./hermes-runtime-process.js";
10
+ import { collectHermesUsageSnapshot, listHermesSessions, readHermesStatusSnapshot } from "./hermes-runtime-usage.js";
11
+ import { compactStringArray, sanitizeFileName } from "./hermes-runtime-values.js";
12
+ const HERMES_ASSISTANT_DELTA_FLUSH_MS = 120;
13
+ const HERMES_ASSISTANT_DELTA_MAX_BYTES = 4096;
14
+ const HERMES_SLASH_COMMAND_SCRIPT = String.raw `
15
+ import contextlib
16
+ import io
17
+ import json
18
+ import os
19
+ import sys
20
+
21
+ from rich.console import Console
22
+
23
+ import cli as cli_mod
24
+ from cli import HermesCLI
25
+
26
+ command = os.environ.get("CLAWCONNECT_HERMES_SLASH_COMMAND", "").strip()
27
+ resume = os.environ.get("CLAWCONNECT_HERMES_SLASH_RESUME", "").strip() or None
28
+ if command and not command.startswith("/"):
29
+ command = "/" + command
30
+
31
+ with contextlib.redirect_stdout(io.StringIO()), contextlib.redirect_stderr(io.StringIO()):
32
+ cli = HermesCLI(model=None, compact=True, resume=resume, verbose=False)
33
+
34
+ buf = io.StringIO()
35
+ cli.console = Console(file=buf, force_terminal=True, width=120)
36
+
37
+ def approve_once(prompt=""):
38
+ if prompt:
39
+ print(prompt, end="")
40
+ return "1"
41
+
42
+ def approve_once_modal(*args, **kwargs):
43
+ return "once"
44
+
45
+ try:
46
+ cli._prompt_text_input = approve_once
47
+ cli._prompt_text_input_modal = approve_once_modal
48
+ except Exception:
49
+ pass
50
+
51
+ old_cprint = getattr(cli_mod, "_cprint", None)
52
+ if old_cprint is not None:
53
+ cli_mod._cprint = lambda text: print(text)
54
+
55
+ try:
56
+ with contextlib.redirect_stdout(buf), contextlib.redirect_stderr(buf):
57
+ keep_going = cli.process_command(command)
58
+ pending_inputs = []
59
+ pending_queue = getattr(cli, "_pending_input", None)
60
+ if pending_queue is not None:
61
+ while True:
62
+ try:
63
+ pending_inputs.append(pending_queue.get_nowait())
64
+ except Exception:
65
+ break
66
+ payload = {
67
+ "ok": True,
68
+ "output": buf.getvalue().rstrip(),
69
+ "sessionId": getattr(cli, "session_id", None),
70
+ "keepGoing": bool(keep_going),
71
+ "pendingInputs": pending_inputs,
72
+ }
73
+ except Exception as exc:
74
+ payload = {
75
+ "ok": False,
76
+ "output": buf.getvalue().rstrip(),
77
+ "error": str(exc),
78
+ "sessionId": getattr(cli, "session_id", None),
79
+ }
80
+ finally:
81
+ if old_cprint is not None:
82
+ cli_mod._cprint = old_cprint
83
+
84
+ sys.stdout.write(json.dumps(payload, ensure_ascii=False))
85
+ `;
86
+ export async function runHermesChat(params, context = {}) {
87
+ const record = params && typeof params === "object" && !Array.isArray(params)
88
+ ? params
89
+ : {};
90
+ const rawMessage = typeof record.message === "string" ? record.message : "";
91
+ const sessionKey = typeof record.sessionKey === "string" && record.sessionKey.trim().length > 0
92
+ ? record.sessionKey.trim()
93
+ : "main";
94
+ if (isHermesSlashCommandMessage(rawMessage)) {
95
+ return await runHermesSlashCommand({ message: rawMessage, sessionKey, hermesSessionId: record.hermesSessionId });
96
+ }
97
+ const message = await prepareHermesMessage(rawMessage, record.attachments, sessionKey);
98
+ if (!message.trim()) {
99
+ throw new Error("message_required");
100
+ }
101
+ const args = ["chat", "--query", message, "--quiet", "--source", "pocketclaw"];
102
+ const resume = typeof record.hermesSessionId === "string" && record.hermesSessionId.trim().length > 0
103
+ ? record.hermesSessionId.trim()
104
+ : await getMappedHermesSessionId(sessionKey);
105
+ if (resume) {
106
+ args.push("--resume", resume);
107
+ }
108
+ const beforeSessions = await listHermesSessions();
109
+ const rawOutput = context.publishEvent
110
+ ? await runHermesChatStreaming(args, sessionKey, context)
111
+ : runHermes(args, CHAT_TIMEOUT_MS);
112
+ const output = sanitizeHermesChatOutput(rawOutput).trim();
113
+ const sessions = await listHermesSessions();
114
+ const mappedSession = selectHermesSessionForCompletedChat(sessions, {
115
+ beforeSessions,
116
+ resume,
117
+ userMessage: rawMessage,
118
+ });
119
+ if (mappedSession) {
120
+ await rememberHermesSession(sessionKey, mappedSession);
121
+ }
122
+ const usage = mappedSession?.hermesSessionId
123
+ ? await collectHermesUsageSnapshot(mappedSession.hermesSessionId)
124
+ : readHermesStatusSnapshot();
125
+ return {
126
+ output,
127
+ sessionKey,
128
+ artifactPaths: extractDeliverablePaths(output, { userMessage: rawMessage }),
129
+ usage,
130
+ };
131
+ }
132
+ export function isHermesSlashCommandMessage(message) {
133
+ return /^\/[A-Za-z0-9][\w-]*(?:\s|$)/.test(message.trim());
134
+ }
135
+ export function selectHermesSessionForCompletedChat(sessions, options = {}) {
136
+ const resume = options.resume?.trim();
137
+ if (resume) {
138
+ return sessions.find((session) => session.hermesSessionId === resume);
139
+ }
140
+ const beforeIds = new Set((options.beforeSessions ?? []).map((session) => session.hermesSessionId));
141
+ const newSessions = sessions.filter((session) => !beforeIds.has(session.hermesSessionId));
142
+ if (newSessions.length === 0) {
143
+ return sessions[0];
144
+ }
145
+ const normalizedUserMessage = normalizeSessionSelectionText(options.userMessage);
146
+ if (normalizedUserMessage) {
147
+ const matched = newSessions.find((session) => {
148
+ const haystack = normalizeSessionSelectionText([
149
+ session.displayName,
150
+ session.derivedTitle,
151
+ session.label,
152
+ ].filter(Boolean).join(" "));
153
+ return haystack.length > 0
154
+ && (haystack.includes(normalizedUserMessage) || normalizedUserMessage.includes(haystack));
155
+ });
156
+ if (matched) {
157
+ return matched;
158
+ }
159
+ }
160
+ return newSessions[0];
161
+ }
162
+ function normalizeSessionSelectionText(value) {
163
+ return value
164
+ ?.replace(/\[Hermes runtime context][\s\S]*$/i, "")
165
+ .replace(/\s+/g, " ")
166
+ .trim()
167
+ .slice(0, 80)
168
+ .toLowerCase() ?? "";
169
+ }
170
+ export async function runHermesSlashCommand(params) {
171
+ const command = params.message.trim();
172
+ const resume = typeof params.hermesSessionId === "string" && params.hermesSessionId.trim().length > 0
173
+ ? params.hermesSessionId.trim()
174
+ : await getMappedHermesSessionId(params.sessionKey);
175
+ const raw = runHermesPython(HERMES_SLASH_COMMAND_SCRIPT, {
176
+ CLAWCONNECT_HERMES_SLASH_COMMAND: command,
177
+ CLAWCONNECT_HERMES_SLASH_RESUME: resume ?? "",
178
+ });
179
+ const payload = parseHermesSlashCommandPayload(raw);
180
+ const output = sanitizeHermesChatOutput(payload.output ?? "").trim();
181
+ if (!payload.ok) {
182
+ const message = [output, payload.error].filter(Boolean).join("\n").trim() || "hermes_slash_command_failed";
183
+ throw new Error(message);
184
+ }
185
+ const sessionId = typeof payload.sessionId === "string" && payload.sessionId.trim().length > 0
186
+ ? payload.sessionId.trim()
187
+ : undefined;
188
+ if (sessionId) {
189
+ await rememberHermesSession(params.sessionKey, {
190
+ sessionKey: params.sessionKey,
191
+ hermesSessionId: sessionId,
192
+ displayName: sessionId,
193
+ label: command,
194
+ lastActivityAt: new Date().toISOString(),
195
+ kind: "hermes",
196
+ });
197
+ }
198
+ if (/^\/(?:new|reset)\b/i.test(command) && resume && sessionId && sessionId !== resume) {
199
+ await forgetHermesSession(resume, resume);
200
+ }
201
+ if (payload.pendingInputs && payload.pendingInputs.length > 0) {
202
+ const queuedMessage = payload.pendingInputs.join("\n\n").trim();
203
+ if (queuedMessage) {
204
+ const queued = await runHermesChat({
205
+ message: queuedMessage,
206
+ sessionKey: params.sessionKey,
207
+ ...(sessionId ? { hermesSessionId: sessionId } : {}),
208
+ });
209
+ return {
210
+ ...queued,
211
+ output: [output, queued.output].filter((part) => part && part !== "(no output)").join("\n\n") || queued.output,
212
+ };
213
+ }
214
+ }
215
+ const usage = await collectHermesUsageSnapshot(sessionId);
216
+ return {
217
+ output: output || "(no output)",
218
+ sessionKey: params.sessionKey,
219
+ artifactPaths: [],
220
+ usage,
221
+ };
222
+ }
223
+ function parseHermesSlashCommandPayload(raw) {
224
+ const parsed = JSON.parse(raw);
225
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
226
+ throw new Error("invalid_hermes_slash_command_payload");
227
+ }
228
+ const record = parsed;
229
+ return {
230
+ ok: record.ok === true,
231
+ output: typeof record.output === "string" ? record.output : undefined,
232
+ error: typeof record.error === "string" ? record.error : undefined,
233
+ sessionId: typeof record.sessionId === "string" ? record.sessionId : undefined,
234
+ pendingInputs: Array.isArray(record.pendingInputs)
235
+ ? record.pendingInputs.filter((value) => typeof value === "string" && value.trim().length > 0)
236
+ : undefined,
237
+ };
238
+ }
239
+ async function runHermesChatStreaming(args, sessionKey, context) {
240
+ const child = spawn(resolveHermesBin(), args, {
241
+ env: SUBPROCESS_ENV,
242
+ stdio: ["ignore", "pipe", "pipe"],
243
+ windowsHide: true,
244
+ });
245
+ const runId = context.requestId ?? `hermes-${Date.now()}`;
246
+ let output = "";
247
+ let stderr = "";
248
+ let seq = 0;
249
+ let stdoutLineBuffer = "";
250
+ let pendingAssistantDelta = "";
251
+ let assistantDeltaFlushTimer;
252
+ let inSecurityReview = false;
253
+ let hasPublishedAssistantText = false;
254
+ const toolCallIdsByName = new Map();
255
+ let toolCallCounter = 0;
256
+ const publishToolLogEvent = (event) => {
257
+ let toolCallId = toolCallIdsByName.get(event.toolName);
258
+ if (!toolCallId) {
259
+ toolCallCounter += 1;
260
+ toolCallId = `${runId}:hermes-tool-${toolCallCounter}`;
261
+ toolCallIdsByName.set(event.toolName, toolCallId);
262
+ }
263
+ if (event.phase === "completed" || event.phase === "failed") {
264
+ toolCallIdsByName.delete(event.toolName);
265
+ }
266
+ context.publishEvent?.({
267
+ type: "event",
268
+ event: "chat",
269
+ payload: {
270
+ runId,
271
+ sessionKey,
272
+ stream: "tool",
273
+ state: event.phase,
274
+ phase: event.phase,
275
+ role: "tool",
276
+ seq: seq += 1,
277
+ ts: Date.now(),
278
+ data: {
279
+ phase: event.phase,
280
+ tool_call_id: toolCallId,
281
+ tool_name: event.toolName,
282
+ text: event.text,
283
+ is_error: event.isError === true,
284
+ },
285
+ },
286
+ });
287
+ };
288
+ const toolLogWatcher = createHermesToolLogWatcher(publishToolLogEvent);
289
+ const filterChatLine = (line) => {
290
+ const clean = stripAnsi(line).trim();
291
+ if (/DANGEROUS COMMAND:\s*Security scan/i.test(clean)) {
292
+ inSecurityReview = true;
293
+ return null;
294
+ }
295
+ if (inSecurityReview) {
296
+ if (/Choice\s*\[[^\]]+\]:/i.test(clean) || /(?:^|\s)[✕x]\s*Denied\b/i.test(clean) || /\bDenied\b/i.test(clean)) {
297
+ inSecurityReview = false;
298
+ }
299
+ return null;
300
+ }
301
+ return line;
302
+ };
303
+ const clearAssistantDeltaFlushTimer = () => {
304
+ if (!assistantDeltaFlushTimer) {
305
+ return;
306
+ }
307
+ clearTimeout(assistantDeltaFlushTimer);
308
+ assistantDeltaFlushTimer = undefined;
309
+ };
310
+ const flushAssistantDelta = () => {
311
+ clearAssistantDeltaFlushTimer();
312
+ if (!pendingAssistantDelta) {
313
+ return;
314
+ }
315
+ const delta = pendingAssistantDelta;
316
+ pendingAssistantDelta = "";
317
+ const timestampMs = Date.now();
318
+ try {
319
+ context.publishEvent?.({
320
+ type: "event",
321
+ event: "chat",
322
+ payload: buildHermesAssistantDeltaPayload({
323
+ runId,
324
+ sessionKey,
325
+ seq: seq += 1,
326
+ timestampMs,
327
+ delta,
328
+ }),
329
+ });
330
+ }
331
+ catch (error) {
332
+ context.publishEvent?.({
333
+ type: "event",
334
+ event: "maintenance_log",
335
+ payload: {
336
+ gatewayId: context.gatewayId,
337
+ requestId: context.requestId,
338
+ runId,
339
+ stream: "stderr",
340
+ seq: seq += 1,
341
+ ts: Date.now(),
342
+ text: `Hermes stream publish failed: ${error instanceof Error ? error.message : String(error)}`,
343
+ },
344
+ });
345
+ }
346
+ };
347
+ const publishAssistantDelta = (text) => {
348
+ hasPublishedAssistantText = true;
349
+ output += text;
350
+ pendingAssistantDelta += text;
351
+ if (Buffer.byteLength(pendingAssistantDelta, "utf8") >= HERMES_ASSISTANT_DELTA_MAX_BYTES) {
352
+ flushAssistantDelta();
353
+ return;
354
+ }
355
+ if (!assistantDeltaFlushTimer) {
356
+ assistantDeltaFlushTimer = setTimeout(flushAssistantDelta, HERMES_ASSISTANT_DELTA_FLUSH_MS);
357
+ assistantDeltaFlushTimer.unref?.();
358
+ }
359
+ };
360
+ const publishText = (text) => {
361
+ stdoutLineBuffer += text;
362
+ const lines = stdoutLineBuffer.split(/\r?\n/);
363
+ stdoutLineBuffer = lines.pop() ?? "";
364
+ const clean = stripHermesSessionResumeNotices(lines
365
+ .map(filterChatLine)
366
+ .filter((line) => line !== null)
367
+ .join("\n"));
368
+ if (!clean.trim()) {
369
+ return;
370
+ }
371
+ const chunk = `${clean}\n`;
372
+ publishAssistantDelta(chunk);
373
+ };
374
+ const flushStdoutLineBuffer = () => {
375
+ if (!stdoutLineBuffer) {
376
+ return;
377
+ }
378
+ const clean = stripHermesSessionResumeNotices(filterChatLine(stdoutLineBuffer) ?? "");
379
+ stdoutLineBuffer = "";
380
+ if (!clean.trim()) {
381
+ return;
382
+ }
383
+ publishAssistantDelta(clean);
384
+ };
385
+ const publishStderr = (text) => {
386
+ const clean = stripAnsi(text).trimEnd();
387
+ if (!clean) {
388
+ return;
389
+ }
390
+ stderr += `${clean}\n`;
391
+ context.publishEvent?.({
392
+ type: "event",
393
+ event: "maintenance_log",
394
+ payload: {
395
+ gatewayId: context.gatewayId,
396
+ requestId: context.requestId,
397
+ runId,
398
+ stream: "stderr",
399
+ seq: seq += 1,
400
+ ts: Date.now(),
401
+ text: clean,
402
+ },
403
+ });
404
+ };
405
+ const publishTypingMarker = () => {
406
+ if (hasPublishedAssistantText) {
407
+ return;
408
+ }
409
+ context.publishEvent?.({
410
+ type: "event",
411
+ event: "chat",
412
+ payload: buildMobileAssistantStreamingPayload({
413
+ run: { runId, sessionKey },
414
+ seq: seq += 1,
415
+ text: HERMES_TYPING_MARKER,
416
+ }),
417
+ });
418
+ };
419
+ child.stdout?.on("data", (chunk) => publishText(chunk.toString()));
420
+ child.stderr?.on("data", (chunk) => publishStderr(chunk.toString()));
421
+ toolLogWatcher.start();
422
+ publishTypingMarker();
423
+ return await new Promise((resolveOutput, rejectOutput) => {
424
+ const typingTimer = setInterval(publishTypingMarker, 5000);
425
+ typingTimer.unref?.();
426
+ const timeout = setTimeout(() => {
427
+ clearInterval(typingTimer);
428
+ clearAssistantDeltaFlushTimer();
429
+ toolLogWatcher.stop();
430
+ child.kill("SIGTERM");
431
+ rejectOutput(new Error("hermes_chat_timeout"));
432
+ }, CHAT_TIMEOUT_MS);
433
+ timeout.unref?.();
434
+ child.once("error", (error) => {
435
+ clearInterval(typingTimer);
436
+ clearTimeout(timeout);
437
+ clearAssistantDeltaFlushTimer();
438
+ toolLogWatcher.stop();
439
+ rejectOutput(error);
440
+ });
441
+ child.once("close", (code, signal) => {
442
+ void (async () => {
443
+ clearInterval(typingTimer);
444
+ clearTimeout(timeout);
445
+ toolLogWatcher.stop();
446
+ flushStdoutLineBuffer();
447
+ flushAssistantDelta();
448
+ if (code && code !== 0) {
449
+ const reason = stderr.trim() || output.trim() || `hermes chat exited with code ${code}`;
450
+ rejectOutput(new Error(signal ? `${reason} (${signal})` : reason));
451
+ return;
452
+ }
453
+ resolveOutput(output);
454
+ })().catch(rejectOutput);
455
+ });
456
+ });
457
+ }
458
+ export function buildHermesAssistantDeltaPayload(params) {
459
+ return buildMobileAssistantDeltaPayload({
460
+ run: { runId: params.runId, sessionKey: params.sessionKey },
461
+ seq: params.seq,
462
+ timestampMs: params.timestampMs,
463
+ delta: params.delta,
464
+ });
465
+ }
466
+ function createHermesToolLogWatcher(onEvent) {
467
+ let offset = 0;
468
+ let timer;
469
+ try {
470
+ offset = statSync(HERMES_AGENT_LOG_FILE).size;
471
+ }
472
+ catch {
473
+ offset = 0;
474
+ }
475
+ const poll = () => {
476
+ let content = "";
477
+ try {
478
+ const bytes = readFileSync(HERMES_AGENT_LOG_FILE);
479
+ if (bytes.length < offset) {
480
+ offset = 0;
481
+ }
482
+ if (bytes.length === offset) {
483
+ return;
484
+ }
485
+ content = bytes.subarray(offset).toString("utf8");
486
+ offset = bytes.length;
487
+ }
488
+ catch {
489
+ return;
490
+ }
491
+ for (const line of content.split(/\r?\n/)) {
492
+ const event = parseHermesToolLogLine(line);
493
+ if (event) {
494
+ onEvent(event);
495
+ }
496
+ }
497
+ };
498
+ return {
499
+ start: () => {
500
+ if (timer) {
501
+ return;
502
+ }
503
+ timer = setInterval(poll, 250);
504
+ timer.unref?.();
505
+ },
506
+ stop: () => {
507
+ poll();
508
+ if (timer) {
509
+ clearInterval(timer);
510
+ timer = undefined;
511
+ }
512
+ },
513
+ };
514
+ }
515
+ export function parseHermesToolLogLine(line) {
516
+ const clean = stripAnsi(line).trim();
517
+ if (!clean) {
518
+ return null;
519
+ }
520
+ const executor = clean.match(/\bagent\.tool_executor:\s*tool\s+([A-Za-z0-9_.-]+)\s+(.+)$/i);
521
+ if (executor) {
522
+ const toolName = normalizeHermesToolName(executor[1] ?? "tool");
523
+ const detail = (executor[2] ?? "").trim();
524
+ if (/\b(?:running|started|executing|start)\b/i.test(detail)) {
525
+ return {
526
+ toolName,
527
+ phase: "streaming",
528
+ text: `${toolName} ${detail}`.trim(),
529
+ isError: false,
530
+ };
531
+ }
532
+ const failed = /\b(?:failed|error|errored|denied|aborted)\b/i.test(detail);
533
+ return {
534
+ toolName,
535
+ phase: failed ? "failed" : "completed",
536
+ text: `${toolName} ${detail}`.trim(),
537
+ isError: failed,
538
+ };
539
+ }
540
+ const toolLogger = clean.match(/\btools\.([A-Za-z0-9_.-]+):\s*(.+)$/i);
541
+ if (!toolLogger) {
542
+ return null;
543
+ }
544
+ const loggerName = toolLogger[1] ?? "tool";
545
+ if (!/(?:_tool|_tools)$/i.test(loggerName)) {
546
+ return null;
547
+ }
548
+ let toolName = normalizeHermesToolName(loggerName);
549
+ let detail = (toolLogger[2] ?? "").trim();
550
+ if (/\b(?:Manually cleaned up environment|Cleaned \d+ environments?)\b/i.test(detail)) {
551
+ return null;
552
+ }
553
+ const nestedTool = detail.match(/^([A-Za-z0-9_.-]+):\s*(.+)$/);
554
+ if (nestedTool) {
555
+ toolName = normalizeHermesToolName(nestedTool[1] ?? toolName);
556
+ detail = (nestedTool[2] ?? "").trim();
557
+ }
558
+ if (!detail) {
559
+ return null;
560
+ }
561
+ return {
562
+ toolName,
563
+ phase: "streaming",
564
+ text: `${toolName}: ${detail}`,
565
+ };
566
+ }
567
+ function normalizeHermesToolName(rawName) {
568
+ const normalized = rawName
569
+ .trim()
570
+ .replace(/[^A-Za-z0-9_.-]+/g, "_")
571
+ .replace(/_tools$/i, "")
572
+ .replace(/_tool$/i, "");
573
+ return normalized || "tool";
574
+ }
575
+ async function prepareHermesMessage(message, attachments, sessionKey) {
576
+ const refs = [];
577
+ if (Array.isArray(attachments)) {
578
+ const safeSession = sessionKey.replace(/[^\w.-]/g, "_") || "main";
579
+ for (const attachment of attachments) {
580
+ if (!attachment || typeof attachment !== "object" || Array.isArray(attachment)) {
581
+ continue;
582
+ }
583
+ const record = attachment;
584
+ if (typeof record.content !== "string" || record.content.length === 0) {
585
+ continue;
586
+ }
587
+ const fileName = sanitizeFileName(typeof record.fileName === "string" ? record.fileName
588
+ : typeof record.name === "string" ? record.name
589
+ : `attachment-${randomUUID()}`);
590
+ const dir = join(HERMES_INBOX_DIR, safeSession, randomUUID());
591
+ await mkdir(dir, { recursive: true });
592
+ const filePath = join(dir, fileName);
593
+ await writeFile(filePath, Buffer.from(record.content, "base64"));
594
+ const mimeType = typeof record.mimeType === "string" ? record.mimeType : "application/octet-stream";
595
+ refs.push(`[file attached: ${filePath} (${mimeType})]`);
596
+ }
597
+ }
598
+ const sections = [message.trim()];
599
+ if (refs.length > 0) {
600
+ sections.push(refs.join("\n"));
601
+ }
602
+ const runtimeHint = buildHermesRuntimeContextHint(readHermesStatusSnapshot());
603
+ if (runtimeHint) {
604
+ sections.push(runtimeHint);
605
+ }
606
+ sections.push(CLAWCONNECT_MOBILE_BRIDGE_HINT);
607
+ return sections.filter(Boolean).join("\n\n").trim();
608
+ }
609
+ export function buildHermesRuntimeContextHint(snapshot) {
610
+ const details = compactStringArray([
611
+ snapshot.currentModel ? `model=${snapshot.currentModel}` : undefined,
612
+ snapshot.provider ? `provider=${snapshot.provider}` : undefined,
613
+ ]);
614
+ if (details.length === 0) {
615
+ return undefined;
616
+ }
617
+ return [
618
+ "[Hermes runtime context]",
619
+ `Current runtime: ${details.join(", ")}.`,
620
+ "If the user asks which model or provider is currently being used, answer from this runtime context.",
621
+ ].join("\n");
622
+ }
623
+ //# sourceMappingURL=hermes-runtime-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-runtime-chat.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { LocalCommandContext, LocalResult } from "../../commands/local-runtime.js";
2
+ export declare function handleHermesCommand(method: string, params: unknown, context?: LocalCommandContext): LocalResult | Promise<LocalResult> | null;