clawconnect-agent 0.1.11 → 0.1.13

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 (102) hide show
  1. package/README.md +16 -0
  2. package/README.zh-CN.md +16 -0
  3. package/dist/commands/install.js +3 -2
  4. package/dist/commands/install.js.map +1 -1
  5. package/dist/commands/pair.js +2 -1
  6. package/dist/commands/pair.js.map +1 -1
  7. package/dist/commands/profile-hints.d.ts +7 -0
  8. package/dist/commands/profile-hints.js +71 -0
  9. package/dist/commands/profile-hints.js.map +1 -0
  10. package/dist/commands/send-file.js +25 -5
  11. package/dist/commands/send-file.js.map +1 -1
  12. package/dist/core/relay/timeline-event-builder.d.ts +5 -1
  13. package/dist/core/relay/timeline-event-builder.js +4 -0
  14. package/dist/core/relay/timeline-event-builder.js.map +1 -1
  15. package/dist/core/relay/timeline-event-log.d.ts +3 -0
  16. package/dist/core/relay/timeline-event-log.js +4 -0
  17. package/dist/core/relay/timeline-event-log.js.map +1 -1
  18. package/dist/hermes/hermes-relay-manager.d.ts +27 -24
  19. package/dist/hermes/hermes-relay-manager.js +126 -343
  20. package/dist/hermes/hermes-relay-manager.js.map +1 -1
  21. package/dist/hermes/hermes-runtime-test-support.d.ts +27 -0
  22. package/dist/hermes/hermes-runtime-test-support.js +703 -0
  23. package/dist/hermes/hermes-runtime-test-support.js.map +1 -0
  24. package/dist/hermes/hermes-runtime.d.ts +1 -2
  25. package/dist/hermes/hermes-runtime.js +1 -2
  26. package/dist/hermes/hermes-runtime.js.map +1 -1
  27. package/dist/hermes/relay/active-hermes-chat-runs.d.ts +12 -0
  28. package/dist/hermes/relay/active-hermes-chat-runs.js +42 -0
  29. package/dist/hermes/relay/active-hermes-chat-runs.js.map +1 -0
  30. package/dist/hermes/relay/hermes-slash-command-catalog.d.ts +22 -0
  31. package/dist/hermes/relay/hermes-slash-command-catalog.js +248 -0
  32. package/dist/hermes/relay/hermes-slash-command-catalog.js.map +1 -0
  33. package/dist/hermes/relay/hermes-state-db-realtime.d.ts +69 -0
  34. package/dist/hermes/relay/hermes-state-db-realtime.js +444 -0
  35. package/dist/hermes/relay/hermes-state-db-realtime.js.map +1 -0
  36. package/dist/hermes/runtime/hermes-runtime-api-client.d.ts +15 -0
  37. package/dist/hermes/runtime/hermes-runtime-api-client.js +510 -0
  38. package/dist/hermes/runtime/hermes-runtime-api-client.js.map +1 -0
  39. package/dist/hermes/runtime/hermes-runtime-chat.d.ts +4 -14
  40. package/dist/hermes/runtime/hermes-runtime-chat.js +205 -436
  41. package/dist/hermes/runtime/hermes-runtime-chat.js.map +1 -1
  42. package/dist/hermes/runtime/hermes-runtime-command-utils.d.ts +1 -0
  43. package/dist/hermes/runtime/hermes-runtime-command-utils.js +10 -1
  44. package/dist/hermes/runtime/hermes-runtime-command-utils.js.map +1 -1
  45. package/dist/hermes/runtime/hermes-runtime-history-completion.d.ts +12 -0
  46. package/dist/hermes/runtime/hermes-runtime-history-completion.js +162 -0
  47. package/dist/hermes/runtime/hermes-runtime-history-completion.js.map +1 -0
  48. package/dist/hermes/runtime/hermes-runtime-history.js +85 -22
  49. package/dist/hermes/runtime/hermes-runtime-history.js.map +1 -1
  50. package/dist/hermes/runtime/hermes-runtime-preloaded-skills.d.ts +11 -0
  51. package/dist/hermes/runtime/hermes-runtime-preloaded-skills.js +67 -0
  52. package/dist/hermes/runtime/hermes-runtime-preloaded-skills.js.map +1 -0
  53. package/dist/hermes/runtime/hermes-runtime-process.d.ts +3 -1
  54. package/dist/hermes/runtime/hermes-runtime-process.js +35 -6
  55. package/dist/hermes/runtime/hermes-runtime-process.js.map +1 -1
  56. package/dist/hermes/runtime/hermes-runtime-sessions.js +28 -3
  57. package/dist/hermes/runtime/hermes-runtime-sessions.js.map +1 -1
  58. package/dist/hermes/runtime/hermes-runtime-slash-command.d.ts +8 -0
  59. package/dist/hermes/runtime/hermes-runtime-slash-command.js +144 -0
  60. package/dist/hermes/runtime/hermes-runtime-slash-command.js.map +1 -0
  61. package/dist/hermes/runtime/hermes-runtime-state-db.d.ts +4 -0
  62. package/dist/hermes/runtime/hermes-runtime-state-db.js +193 -0
  63. package/dist/hermes/runtime/hermes-runtime-state-db.js.map +1 -0
  64. package/dist/hermes/runtime/hermes-runtime-tool-log-watcher.d.ts +8 -0
  65. package/dist/hermes/runtime/hermes-runtime-tool-log-watcher.js +121 -0
  66. package/dist/hermes/runtime/hermes-runtime-tool-log-watcher.js.map +1 -0
  67. package/dist/hermes/runtime/hermes-runtime-usage.d.ts +2 -0
  68. package/dist/hermes/runtime/hermes-runtime-usage.js +59 -5
  69. package/dist/hermes/runtime/hermes-runtime-usage.js.map +1 -1
  70. package/dist/i18n/index.js +4 -0
  71. package/dist/i18n/index.js.map +1 -1
  72. package/dist/index.js +22 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/openclaw/handlers/local-handlers.js +66 -20
  75. package/dist/openclaw/handlers/local-handlers.js.map +1 -1
  76. package/dist/openclaw/relay/chat-send-dedupe-coordinator.d.ts +20 -0
  77. package/dist/openclaw/relay/chat-send-dedupe-coordinator.js +161 -0
  78. package/dist/openclaw/relay/chat-send-dedupe-coordinator.js.map +1 -0
  79. package/dist/openclaw/relay/relay-manager-hello.d.ts +6 -0
  80. package/dist/openclaw/relay/relay-manager-hello.js +11 -0
  81. package/dist/openclaw/relay/relay-manager-hello.js.map +1 -0
  82. package/dist/openclaw/relay/relay-manager-history-timing.d.ts +5 -0
  83. package/dist/openclaw/relay/relay-manager-history-timing.js +6 -0
  84. package/dist/openclaw/relay/relay-manager-history-timing.js.map +1 -0
  85. package/dist/openclaw/relay/relay-manager-office-events.d.ts +2 -0
  86. package/dist/openclaw/relay/relay-manager-office-events.js +9 -0
  87. package/dist/openclaw/relay/relay-manager-office-events.js.map +1 -0
  88. package/dist/openclaw/relay/relay-manager-payload-helpers.d.ts +18 -0
  89. package/dist/openclaw/relay/relay-manager-payload-helpers.js +213 -0
  90. package/dist/openclaw/relay/relay-manager-payload-helpers.js.map +1 -0
  91. package/dist/openclaw/relay/relay-manager-protocol.d.ts +49 -0
  92. package/dist/openclaw/relay/relay-manager-protocol.js +2 -0
  93. package/dist/openclaw/relay/relay-manager-protocol.js.map +1 -0
  94. package/dist/openclaw/relay-manager.d.ts +3 -27
  95. package/dist/openclaw/relay-manager.js +19 -402
  96. package/dist/openclaw/relay-manager.js.map +1 -1
  97. package/dist/openclaw/session-store.js +42 -1
  98. package/dist/openclaw/session-store.js.map +1 -1
  99. package/package.json +1 -1
  100. package/dist/hermes/runtime/hermes-runtime-artifacts.d.ts +0 -3
  101. package/dist/hermes/runtime/hermes-runtime-artifacts.js +0 -75
  102. package/dist/hermes/runtime/hermes-runtime-artifacts.js.map +0 -1
@@ -0,0 +1,444 @@
1
+ import { execFile as execFileCb } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { canonicalizeMobileAssistantText } from "../../core/relay/mobile-chat-run-bridge.js";
7
+ import { parseCanonicalTimelineEvent, } from "../../core/relay/timeline-event-log.js";
8
+ import { HERMES_HOME_DIR, SUBPROCESS_ENV, } from "../runtime/hermes-runtime-process.js";
9
+ const execFile = promisify(execFileCb);
10
+ const CLAWCONNECT_MOBILE_TURN_MARKER = "[ClawConnect mobile turn]";
11
+ const CLAWCONNECT_MOBILE_BRIDGE_MARKER = "[ClawConnect mobile bridge]";
12
+ const HERMES_STATE_DB_REALTIME_QUERY_TIMEOUT_MS = 5_000;
13
+ const HERMES_STATE_DB_REALTIME_DEFAULT_LIMIT = 200;
14
+ const HERMES_STATE_DB_REALTIME_DEFAULT_POLL_INTERVAL_MS = 750;
15
+ const HERMES_RUNTIME_CONTEXT_HINT_REGEX = /(^|\r?\n)[ \t]*\[Hermes runtime context\][\s\S]*?(?=\r?\n[ \t]*\[ClawConnect mobile bridge\]|\r?\n[ \t]*\[ClawConnect mobile turn\]|$)/gi;
16
+ const HERMES_STATE_DB_REALTIME_QUERY_SCRIPT = String.raw `
17
+ import json
18
+ import sqlite3
19
+ import sys
20
+
21
+ mode = sys.argv[1]
22
+ db_path = sys.argv[2]
23
+
24
+ def connect():
25
+ conn = sqlite3.connect(f"file:{db_path}?mode=ro", uri=True, timeout=1.0)
26
+ conn.row_factory = sqlite3.Row
27
+ conn.execute("PRAGMA query_only=ON")
28
+ return conn
29
+
30
+ try:
31
+ conn = connect()
32
+ if mode == "max":
33
+ row = conn.execute("SELECT COALESCE(MAX(id), 0) AS max_id FROM messages").fetchone()
34
+ print(json.dumps({"ok": True, "payload": int(row["max_id"] or 0)}, ensure_ascii=False))
35
+ elif mode == "rows":
36
+ after_id = int(sys.argv[3])
37
+ limit = int(sys.argv[4])
38
+ rows = conn.execute("""
39
+ SELECT
40
+ m.id,
41
+ m.session_id,
42
+ COALESCE(s.source, '') AS session_source,
43
+ m.role,
44
+ COALESCE(m.content, '') AS content,
45
+ m.timestamp,
46
+ COALESCE(m.active, 1) AS active,
47
+ COALESCE(m.observed, 0) AS observed,
48
+ m.tool_name,
49
+ m.tool_call_id,
50
+ m.platform_message_id
51
+ FROM messages m
52
+ LEFT JOIN sessions s ON s.id = m.session_id
53
+ WHERE m.id > ?
54
+ ORDER BY m.id ASC
55
+ LIMIT ?
56
+ """, (after_id, limit)).fetchall()
57
+ payload = []
58
+ for row in rows:
59
+ payload.append({
60
+ "id": int(row["id"]),
61
+ "sessionId": row["session_id"],
62
+ "sessionSource": row["session_source"],
63
+ "role": row["role"],
64
+ "content": row["content"],
65
+ "timestamp": row["timestamp"],
66
+ "active": bool(row["active"]),
67
+ "observed": bool(row["observed"]),
68
+ "toolName": row["tool_name"],
69
+ "toolCallId": row["tool_call_id"],
70
+ "platformMessageId": row["platform_message_id"],
71
+ })
72
+ print(json.dumps({"ok": True, "payload": payload}, ensure_ascii=False))
73
+ else:
74
+ print(json.dumps({"ok": False, "error": "unsupported mode"}, ensure_ascii=False))
75
+ except Exception as exc:
76
+ print(json.dumps({"ok": False, "error": str(exc)}, ensure_ascii=False))
77
+ `;
78
+ export function buildHermesStateDbRealtimePayloads(params) {
79
+ const cursor = cloneCursor(params.cursor);
80
+ const payloads = [];
81
+ const rows = [...params.rows].sort((left, right) => left.id - right.id);
82
+ for (const row of rows) {
83
+ if (row.id <= cursor.lastMessageId) {
84
+ continue;
85
+ }
86
+ cursor.lastMessageId = Math.max(cursor.lastMessageId, row.id);
87
+ if (!row.active) {
88
+ continue;
89
+ }
90
+ if (row.role === "user") {
91
+ const visibleText = normalizeHermesStateDbUserText(row.content);
92
+ if (!visibleText) {
93
+ delete cursor.openTurnsBySession[row.sessionId];
94
+ continue;
95
+ }
96
+ // ClawConnect 自己发起的移动端 turn 已经通过 API/CLI streaming 推送过;
97
+ // state.db 回写只用于历史,所以后续 assistant/tool 行必须跳过到下一个 user 行。
98
+ const skipUntilNextUser = isClawConnectMobileTurn(row.content);
99
+ const turn = buildOpenTurn(row, skipUntilNextUser);
100
+ cursor.openTurnsBySession[row.sessionId] = turn;
101
+ if (skipUntilNextUser) {
102
+ continue;
103
+ }
104
+ payloads.push(buildUserPayload(params.gatewayId, row, turn, visibleText));
105
+ continue;
106
+ }
107
+ const turn = cursor.openTurnsBySession[row.sessionId] ?? buildOpenTurn(row, false);
108
+ if (turn.skipUntilNextUser) {
109
+ continue;
110
+ }
111
+ const visibleText = normalizeHermesStateDbOutputText(row.content);
112
+ if (!visibleText) {
113
+ continue;
114
+ }
115
+ payloads.push(buildOutputPayload(params.gatewayId, row, turn, visibleText));
116
+ }
117
+ return { cursor, payloads };
118
+ }
119
+ export async function queryHermesStateDbMaxMessageId(params) {
120
+ if (!existsSync(params.dbPath)) {
121
+ return 0;
122
+ }
123
+ const payload = await runHermesStateDbRealtimeQuery("max", params.dbPath, [], params.pythonBin);
124
+ return typeof payload === "number" && Number.isFinite(payload) ? Math.max(0, Math.floor(payload)) : 0;
125
+ }
126
+ export async function queryHermesStateDbRealtimeRows(params) {
127
+ if (!existsSync(params.dbPath)) {
128
+ return [];
129
+ }
130
+ const afterMessageId = Math.max(0, Math.floor(params.afterMessageId));
131
+ const limit = Math.max(1, Math.floor(params.limit ?? HERMES_STATE_DB_REALTIME_DEFAULT_LIMIT));
132
+ const payload = await runHermesStateDbRealtimeQuery("rows", params.dbPath, [String(afterMessageId), String(limit)], params.pythonBin);
133
+ return Array.isArray(payload) ? payload.flatMap(parseHermesStateDbRealtimeMessageRow) : [];
134
+ }
135
+ export function createHermesStateDbRealtimeWatcher(params) {
136
+ let cursor = { lastMessageId: 0, openTurnsBySession: {} };
137
+ let timer;
138
+ let running = false;
139
+ const pollIntervalMs = Math.max(250, Math.floor(params.pollIntervalMs ?? HERMES_STATE_DB_REALTIME_DEFAULT_POLL_INTERVAL_MS));
140
+ const queryMaxMessageId = params.queryMaxMessageId
141
+ ?? (() => queryHermesStateDbMaxMessageId({ dbPath: params.dbPath }));
142
+ const queryRows = params.queryRows
143
+ ?? ((queryParams) => queryHermesStateDbRealtimeRows({
144
+ dbPath: params.dbPath,
145
+ afterMessageId: queryParams.afterMessageId,
146
+ }));
147
+ async function withErrorBoundary(operation) {
148
+ try {
149
+ await operation();
150
+ }
151
+ catch (error) {
152
+ params.onError?.(error);
153
+ }
154
+ }
155
+ async function primeCursor() {
156
+ await withErrorBoundary(async () => {
157
+ const maxMessageId = await queryMaxMessageId();
158
+ cursor = {
159
+ ...cursor,
160
+ lastMessageId: Math.max(cursor.lastMessageId, maxMessageId),
161
+ };
162
+ });
163
+ }
164
+ async function pollOnce() {
165
+ if (running) {
166
+ return;
167
+ }
168
+ running = true;
169
+ await withErrorBoundary(async () => {
170
+ const rows = await queryRows({ afterMessageId: cursor.lastMessageId });
171
+ if (rows.length === 0) {
172
+ return;
173
+ }
174
+ const result = buildHermesStateDbRealtimePayloads({
175
+ gatewayId: params.gatewayId,
176
+ cursor,
177
+ rows,
178
+ });
179
+ cursor = result.cursor;
180
+ for (const payload of result.payloads) {
181
+ params.publishPayload(payload);
182
+ }
183
+ });
184
+ running = false;
185
+ }
186
+ function start() {
187
+ if (timer) {
188
+ return;
189
+ }
190
+ void primeCursor().then(() => pollOnce());
191
+ timer = setInterval(() => {
192
+ void pollOnce();
193
+ }, pollIntervalMs);
194
+ }
195
+ function stop() {
196
+ if (!timer) {
197
+ return;
198
+ }
199
+ clearInterval(timer);
200
+ timer = undefined;
201
+ }
202
+ return {
203
+ primeCursor,
204
+ pollOnce,
205
+ start,
206
+ stop,
207
+ cursor: () => cloneCursor(cursor),
208
+ };
209
+ }
210
+ export function resolveHermesStateDbRealtimePath() {
211
+ const explicit = process.env.CLAWCONNECT_HERMES_STATE_DB?.trim();
212
+ if (explicit) {
213
+ return explicit;
214
+ }
215
+ if (process.env.HERMES_BIN?.trim()) {
216
+ return undefined;
217
+ }
218
+ return join(process.env.HERMES_HOME?.trim() || HERMES_HOME_DIR, "state.db");
219
+ }
220
+ export function resolveHermesStateDbRealtimePython() {
221
+ const explicit = process.env.HERMES_PYTHON?.trim();
222
+ if (explicit) {
223
+ return explicit;
224
+ }
225
+ const hermesHome = process.env.HERMES_HOME?.trim() || HERMES_HOME_DIR;
226
+ const candidates = [
227
+ join(hermesHome, "hermes-agent", "venv", "bin", "python"),
228
+ join(hermesHome, "hermes-agent", "venv", "Scripts", "python.exe"),
229
+ join(hermesHome, "hermes-agent", "venv", "Scripts", "python"),
230
+ ];
231
+ return candidates.find((candidate) => existsSync(candidate)) ?? "python3";
232
+ }
233
+ async function runHermesStateDbRealtimeQuery(mode, dbPath, args, pythonBin = resolveHermesStateDbRealtimePython()) {
234
+ const { stdout } = await execFile(pythonBin, ["-c", HERMES_STATE_DB_REALTIME_QUERY_SCRIPT, mode, dbPath, ...args], {
235
+ cwd: homedir(),
236
+ encoding: "utf8",
237
+ env: { ...SUBPROCESS_ENV, ...process.env },
238
+ timeout: HERMES_STATE_DB_REALTIME_QUERY_TIMEOUT_MS,
239
+ });
240
+ const parsed = JSON.parse(stdout.trim());
241
+ if (parsed.ok === true) {
242
+ return parsed.payload;
243
+ }
244
+ throw new Error(typeof parsed.error === "string" ? parsed.error : "Hermes state.db realtime query failed");
245
+ }
246
+ function parseHermesStateDbRealtimeMessageRow(value) {
247
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
248
+ return [];
249
+ }
250
+ const record = value;
251
+ const id = numberValue(record.id);
252
+ const sessionId = stringValue(record.sessionId);
253
+ const role = parseTimelineRole(record.role);
254
+ const timestamp = numberValue(record.timestamp);
255
+ if (id === undefined || !sessionId || !role || timestamp === undefined) {
256
+ return [];
257
+ }
258
+ return [{
259
+ id,
260
+ sessionId,
261
+ sessionSource: stringValue(record.sessionSource) ?? "",
262
+ role,
263
+ content: stringValue(record.content) ?? "",
264
+ timestamp,
265
+ active: booleanValue(record.active, true),
266
+ observed: booleanValue(record.observed, false),
267
+ ...(stringValue(record.toolName) ? { toolName: stringValue(record.toolName) } : {}),
268
+ ...(stringValue(record.toolCallId) ? { toolCallId: stringValue(record.toolCallId) } : {}),
269
+ ...(stringValue(record.platformMessageId) ? { platformMessageId: stringValue(record.platformMessageId) } : {}),
270
+ }];
271
+ }
272
+ function parseTimelineRole(value) {
273
+ const role = stringValue(value)?.trim().toLowerCase();
274
+ return role === "user" || role === "assistant" || role === "tool" || role === "system"
275
+ ? role
276
+ : undefined;
277
+ }
278
+ function stringValue(value) {
279
+ if (typeof value === "string") {
280
+ return value;
281
+ }
282
+ if (typeof value === "number" || typeof value === "boolean") {
283
+ return String(value);
284
+ }
285
+ return undefined;
286
+ }
287
+ function numberValue(value) {
288
+ if (typeof value === "number" && Number.isFinite(value)) {
289
+ return value;
290
+ }
291
+ if (typeof value === "string" && value.trim()) {
292
+ const parsed = Number(value);
293
+ return Number.isFinite(parsed) ? parsed : undefined;
294
+ }
295
+ return undefined;
296
+ }
297
+ function booleanValue(value, fallback) {
298
+ if (typeof value === "boolean") {
299
+ return value;
300
+ }
301
+ if (typeof value === "number") {
302
+ return value !== 0;
303
+ }
304
+ if (typeof value === "string") {
305
+ const normalized = value.trim().toLowerCase();
306
+ if (normalized === "true" || normalized === "1") {
307
+ return true;
308
+ }
309
+ if (normalized === "false" || normalized === "0") {
310
+ return false;
311
+ }
312
+ }
313
+ return fallback;
314
+ }
315
+ function cloneCursor(cursor) {
316
+ return {
317
+ lastMessageId: cursor.lastMessageId,
318
+ openTurnsBySession: Object.fromEntries(Object.entries(cursor.openTurnsBySession).map(([key, value]) => [key, { ...value }])),
319
+ };
320
+ }
321
+ function buildOpenTurn(row, skipUntilNextUser) {
322
+ const turnId = row.role === "user"
323
+ ? `hermes-db-${row.sessionId}-turn-${row.id}`
324
+ : `hermes-db-${row.sessionId}-orphan-turn-${row.id}`;
325
+ return {
326
+ turnId,
327
+ runId: turnId,
328
+ skipUntilNextUser,
329
+ };
330
+ }
331
+ function buildUserPayload(gatewayId, row, turn, text) {
332
+ const event = buildTimelineEvent({
333
+ gatewayId,
334
+ sessionKey: hermesStateDbSessionKey(row.sessionId),
335
+ row,
336
+ turn,
337
+ eventType: "turn.user.created",
338
+ role: "user",
339
+ messageState: "completed",
340
+ runState: "active",
341
+ content: [{ type: "text", text }],
342
+ });
343
+ return {
344
+ runId: turn.runId,
345
+ sessionKey: event.sessionKey,
346
+ state: "history_sync",
347
+ role: "user",
348
+ timelineEvents: [event],
349
+ };
350
+ }
351
+ function buildOutputPayload(gatewayId, row, turn, text) {
352
+ const completed = buildTimelineEvent({
353
+ gatewayId,
354
+ sessionKey: hermesStateDbSessionKey(row.sessionId),
355
+ row,
356
+ turn,
357
+ eventType: "message.completed",
358
+ role: row.role,
359
+ messageState: "completed",
360
+ runState: "active",
361
+ content: [{ type: "text", text }],
362
+ });
363
+ const runCompleted = buildTimelineEvent({
364
+ gatewayId,
365
+ sessionKey: completed.sessionKey,
366
+ row,
367
+ turn,
368
+ eventType: "run.completed",
369
+ role: row.role,
370
+ messageState: "completed",
371
+ runState: "completed",
372
+ content: [],
373
+ messageId: completed.messageId,
374
+ partId: "run-state",
375
+ });
376
+ return {
377
+ runId: turn.runId,
378
+ sessionKey: completed.sessionKey,
379
+ state: "history_sync",
380
+ role: row.role,
381
+ timelineEvents: [completed, runCompleted],
382
+ };
383
+ }
384
+ function buildTimelineEvent(params) {
385
+ const messageId = params.messageId ?? hermesStateDbMessageId(params.row);
386
+ return parseCanonicalTimelineEvent({
387
+ protocolVersion: 2,
388
+ eventId: `evt-${messageId}-${params.eventType}`,
389
+ eventType: params.eventType,
390
+ gatewayId: params.gatewayId,
391
+ sessionKey: params.sessionKey,
392
+ turnId: params.turn.turnId,
393
+ runId: params.turn.runId,
394
+ messageId,
395
+ partId: params.partId ?? "part-text-1",
396
+ attachmentId: null,
397
+ seq: params.row.id,
398
+ turnSeq: params.row.id,
399
+ role: params.role,
400
+ messageState: params.messageState,
401
+ runState: params.runState,
402
+ createdAt: timestampToIso(params.row.timestamp),
403
+ source: "history",
404
+ content: params.content,
405
+ attachment: null,
406
+ error: null,
407
+ });
408
+ }
409
+ function hermesStateDbSessionKey(sessionId) {
410
+ return sessionId.startsWith("hermes:") ? sessionId : `hermes:${sessionId}`;
411
+ }
412
+ function hermesStateDbMessageId(row) {
413
+ return `hermes-db-${row.sessionId}-message-${row.id}-${row.role}`;
414
+ }
415
+ function normalizeHermesStateDbUserText(text) {
416
+ return stripClawConnectMetadata(text)
417
+ .split(/\r?\n/)
418
+ .filter((line) => !/^\s*\[file attached:\s+.+]\s*$/i.test(line.trim()))
419
+ .join("\n")
420
+ .replace(/\n{3,}/g, "\n\n")
421
+ .trim();
422
+ }
423
+ function normalizeHermesStateDbOutputText(text) {
424
+ return canonicalizeMobileAssistantText(text).text.trim();
425
+ }
426
+ function stripClawConnectMetadata(text) {
427
+ const withoutRuntimeContext = text
428
+ .replace(HERMES_RUNTIME_CONTEXT_HINT_REGEX, "$1")
429
+ .replace(/\n{3,}/g, "\n\n");
430
+ const cutoff = [
431
+ withoutRuntimeContext.indexOf(CLAWCONNECT_MOBILE_BRIDGE_MARKER),
432
+ withoutRuntimeContext.indexOf(CLAWCONNECT_MOBILE_TURN_MARKER),
433
+ ]
434
+ .filter((index) => index >= 0)
435
+ .sort((left, right) => left - right)[0];
436
+ return cutoff === undefined ? withoutRuntimeContext : withoutRuntimeContext.slice(0, cutoff);
437
+ }
438
+ function isClawConnectMobileTurn(text) {
439
+ return text.includes(CLAWCONNECT_MOBILE_TURN_MARKER);
440
+ }
441
+ function timestampToIso(timestamp) {
442
+ return new Date(timestamp < 10_000_000_000 ? timestamp * 1_000 : timestamp).toISOString();
443
+ }
444
+ //# sourceMappingURL=hermes-state-db-realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-state-db-realtime.js","sourceRoot":"","sources":["../../../src/hermes/relay/hermes-state-db-realtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { LocalCommandContext } from "../../core/command-types.js";
2
+ import type { HermesChatResult } from "./hermes-runtime-types.js";
3
+ type HermesApiChatResult = HermesChatResult & {
4
+ hermesSessionId: string;
5
+ };
6
+ export declare function tryRunHermesApiChat(params: {
7
+ message: string;
8
+ instructions?: string;
9
+ sessionKey: string;
10
+ resume?: string;
11
+ preloadedSkillNames?: string[];
12
+ requiredToolsets?: string[];
13
+ context: LocalCommandContext;
14
+ }): Promise<HermesApiChatResult | undefined>;
15
+ export {};