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,510 @@
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { homedir } from "os";
3
+ import { join } from "path";
4
+ import { TextDecoder } from "util";
5
+ import { buildMobileAssistantDeltaPayload } from "../../core/relay/mobile-chat-run-bridge.js";
6
+ import { buildToolInvocationUpdatedEvent } from "../../core/relay/timeline-event-builder.js";
7
+ import { parseEnvFile } from "../../config/env.js";
8
+ import { rememberHermesSession } from "../hermes-session-store.js";
9
+ import { buildHermesPreloadedSkillsPrompt } from "./hermes-runtime-preloaded-skills.js";
10
+ import { CHAT_TIMEOUT_MS, HERMES_HOME_DIR, sanitizeHermesChatOutput } from "./hermes-runtime-process.js";
11
+ import { compactStringArray } from "./hermes-runtime-values.js";
12
+ import { hermesToolState } from "./hermes-runtime-tool-log-watcher.js";
13
+ const DEFAULT_HERMES_API_HOST = "127.0.0.1";
14
+ const DEFAULT_HERMES_API_PORT = "8642";
15
+ const HERMES_API_HEALTH_TIMEOUT_MS = 1_500;
16
+ const HERMES_API_TOOLSETS_TIMEOUT_MS = 1_500;
17
+ export async function tryRunHermesApiChat(params) {
18
+ const config = readHermesApiConfig();
19
+ if (!config) {
20
+ return undefined;
21
+ }
22
+ const healthy = await isHermesApiHealthy(config);
23
+ if (!healthy) {
24
+ return undefined;
25
+ }
26
+ const requiredToolsetsAvailable = await hasRequiredHermesApiToolsets(config, params.requiredToolsets);
27
+ if (!requiredToolsetsAvailable) {
28
+ return undefined;
29
+ }
30
+ return await runHermesApiChat(config, params);
31
+ }
32
+ function readHermesApiConfig() {
33
+ if (isTruthyEnv(process.env.CLAWCONNECT_HERMES_API_DISABLED)) {
34
+ return undefined;
35
+ }
36
+ const explicitUrl = firstNonEmpty(process.env.CLAWCONNECT_HERMES_API_URL, process.env.HERMES_API_SERVER_URL);
37
+ const explicitApiKey = firstNonEmpty(process.env.CLAWCONNECT_HERMES_API_KEY, process.env.API_SERVER_KEY);
38
+ if (process.env.HERMES_BIN?.trim() && (!explicitUrl || !explicitApiKey)) {
39
+ // HERMES_BIN 是测试和诊断替换 Hermes CLI 的显式契约;不能让真实 ~/.hermes/.env API 配置绕过 fake binary。
40
+ return undefined;
41
+ }
42
+ const hermesEnv = readHermesEnvFile();
43
+ const apiKey = firstNonEmpty(explicitApiKey, hermesEnv.API_SERVER_KEY);
44
+ if (!apiKey) {
45
+ return undefined;
46
+ }
47
+ if (explicitUrl) {
48
+ return { baseUrl: normalizeBaseUrl(explicitUrl), apiKey };
49
+ }
50
+ const host = firstNonEmpty(process.env.API_SERVER_HOST, hermesEnv.API_SERVER_HOST) ?? DEFAULT_HERMES_API_HOST;
51
+ const port = firstNonEmpty(process.env.API_SERVER_PORT, hermesEnv.API_SERVER_PORT) ?? DEFAULT_HERMES_API_PORT;
52
+ return { baseUrl: normalizeBaseUrl(`http://${host}:${port}`), apiKey };
53
+ }
54
+ function readHermesEnvFile() {
55
+ const envPath = join(process.env.HERMES_HOME?.trim() || HERMES_HOME_DIR || join(homedir(), ".hermes"), ".env");
56
+ if (!existsSync(envPath)) {
57
+ return {};
58
+ }
59
+ try {
60
+ return parseEnvFile(readFileSync(envPath, "utf8"));
61
+ }
62
+ catch {
63
+ return {};
64
+ }
65
+ }
66
+ async function isHermesApiHealthy(config) {
67
+ try {
68
+ const response = await fetchWithTimeout(`${config.baseUrl}/health`, {
69
+ headers: buildHermesApiHeaders(config),
70
+ }, HERMES_API_HEALTH_TIMEOUT_MS);
71
+ return response.ok;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ async function hasRequiredHermesApiToolsets(config, requiredToolsets) {
78
+ const required = new Set(compactStringArray(requiredToolsets ?? []));
79
+ if (required.size === 0) {
80
+ return true;
81
+ }
82
+ try {
83
+ const response = await fetchWithTimeout(`${config.baseUrl}/v1/toolsets`, {
84
+ headers: buildHermesApiHeaders(config),
85
+ }, HERMES_API_TOOLSETS_TIMEOUT_MS);
86
+ if (!response.ok) {
87
+ return false;
88
+ }
89
+ const payload = await readJsonResponse(response);
90
+ const data = payload && typeof payload === "object" && !Array.isArray(payload)
91
+ ? payload.data
92
+ : undefined;
93
+ const enabledToolsets = new Set();
94
+ if (Array.isArray(data)) {
95
+ for (const item of data) {
96
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
97
+ continue;
98
+ }
99
+ const record = item;
100
+ const name = stringValue(record.name);
101
+ if (name && record.enabled === true) {
102
+ enabledToolsets.add(name);
103
+ }
104
+ }
105
+ }
106
+ for (const toolset of required) {
107
+ if (!enabledToolsets.has(toolset)) {
108
+ return false;
109
+ }
110
+ }
111
+ return true;
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ async function runHermesApiChat(config, params) {
118
+ const sessionId = params.resume ?? await createHermesApiSession(config, params.sessionKey);
119
+ const preloadedSkillPrompt = await resolveHermesApiPreloadedSkillPrompt(params.preloadedSkillNames, sessionId);
120
+ if ((params.preloadedSkillNames?.length ?? 0) > 0 && !preloadedSkillPrompt) {
121
+ return undefined;
122
+ }
123
+ const instructions = combineHermesApiInstructions(params.instructions, preloadedSkillPrompt);
124
+ const stream = await openHermesApiChatStream(config, {
125
+ sessionId,
126
+ sessionKey: params.sessionKey,
127
+ message: params.message,
128
+ instructions,
129
+ abortSignal: params.context.abortSignal,
130
+ });
131
+ const parsed = await consumeHermesApiChatStream(stream, {
132
+ sessionId,
133
+ sessionKey: params.sessionKey,
134
+ context: params.context,
135
+ });
136
+ await rememberHermesSession(params.sessionKey, {
137
+ sessionKey: params.sessionKey,
138
+ hermesSessionId: parsed.hermesSessionId,
139
+ displayName: params.sessionKey,
140
+ label: parsed.output,
141
+ kind: "hermes",
142
+ });
143
+ return {
144
+ output: parsed.output,
145
+ sessionKey: params.sessionKey,
146
+ artifactPaths: [],
147
+ usage: parsed.usage,
148
+ hermesSessionId: parsed.hermesSessionId,
149
+ };
150
+ }
151
+ async function createHermesApiSession(config, sessionKey) {
152
+ const response = await fetchWithTimeout(`${config.baseUrl}/api/sessions`, {
153
+ method: "POST",
154
+ headers: buildHermesApiHeaders(config),
155
+ body: JSON.stringify({ title: sessionKey }),
156
+ }, HERMES_API_HEALTH_TIMEOUT_MS);
157
+ const payload = await readJsonResponse(response);
158
+ if (!response.ok) {
159
+ throw new Error(`Hermes API session create failed: ${extractHermesApiError(payload, response.status)}`);
160
+ }
161
+ const sessionId = extractSessionId(payload);
162
+ if (!sessionId) {
163
+ throw new Error("Hermes API session create failed: missing session id");
164
+ }
165
+ return sessionId;
166
+ }
167
+ async function openHermesApiChatStream(config, params) {
168
+ const response = await fetchWithTimeout(`${config.baseUrl}/api/sessions/${encodeURIComponent(params.sessionId)}/chat/stream`, {
169
+ method: "POST",
170
+ headers: {
171
+ ...buildHermesApiHeaders(config),
172
+ "X-Hermes-Session-Key": params.sessionKey,
173
+ },
174
+ body: JSON.stringify({
175
+ message: params.message,
176
+ ...(params.instructions ? { instructions: params.instructions } : {}),
177
+ }),
178
+ }, CHAT_TIMEOUT_MS, params.abortSignal);
179
+ if (!response.ok) {
180
+ const payload = await readJsonResponse(response);
181
+ const message = extractHermesApiError(payload, response.status);
182
+ if (response.status === 404 && /session/i.test(message)) {
183
+ throw new Error(`Session not found: ${params.sessionId}`);
184
+ }
185
+ throw new Error(`Hermes API chat stream failed: ${message}`);
186
+ }
187
+ if (!response.body) {
188
+ throw new Error("Hermes API chat stream failed: missing response body");
189
+ }
190
+ return response;
191
+ }
192
+ async function resolveHermesApiPreloadedSkillPrompt(preloadedSkillNames, sessionId) {
193
+ if (!preloadedSkillNames || preloadedSkillNames.length === 0) {
194
+ return undefined;
195
+ }
196
+ return await buildHermesPreloadedSkillsPrompt(preloadedSkillNames, sessionId);
197
+ }
198
+ function combineHermesApiInstructions(...sections) {
199
+ const instructions = compactStringArray(sections).join("\n\n").trim();
200
+ return instructions || undefined;
201
+ }
202
+ async function consumeHermesApiChatStream(response, params) {
203
+ const reader = response.body?.getReader();
204
+ if (!reader) {
205
+ throw new Error("Hermes API chat stream failed: missing stream reader");
206
+ }
207
+ const decoder = new TextDecoder();
208
+ const runId = params.context.requestId ?? `hermes-api-${Date.now()}`;
209
+ let buffer = "";
210
+ let seq = 0;
211
+ let deltaOutput = "";
212
+ let finalOutput = "";
213
+ let usage;
214
+ let hermesSessionId = params.sessionId;
215
+ const handleEvent = (event) => {
216
+ const record = event.data && typeof event.data === "object" && !Array.isArray(event.data)
217
+ ? event.data
218
+ : {};
219
+ const eventSessionId = stringValue(record.session_id);
220
+ if (eventSessionId) {
221
+ hermesSessionId = eventSessionId;
222
+ }
223
+ switch (event.event) {
224
+ case "assistant.delta": {
225
+ const delta = stringValue(record.delta);
226
+ if (!delta) {
227
+ return;
228
+ }
229
+ deltaOutput += delta;
230
+ params.context.publishEvent?.({
231
+ type: "event",
232
+ event: "chat",
233
+ payload: buildMobileAssistantDeltaPayload({
234
+ run: { runId, sessionKey: params.sessionKey },
235
+ seq: seq += 1,
236
+ timestampMs: Date.now(),
237
+ // canonical message.part.delta 是同一 part 的绝对状态;Hermes API 的 assistant.delta 是增量片段。
238
+ delta: deltaOutput,
239
+ includeTimelineEvents: true,
240
+ }),
241
+ });
242
+ return;
243
+ }
244
+ case "assistant.completed": {
245
+ const content = sanitizeHermesChatOutput(stringValue(record.content) ?? stringValue(record.text) ?? "").trim();
246
+ if (content) {
247
+ finalOutput = content;
248
+ }
249
+ return;
250
+ }
251
+ case "run.completed": {
252
+ const content = sanitizeHermesChatOutput(stringValue(record.output) ?? "").trim();
253
+ if (content) {
254
+ finalOutput = content;
255
+ }
256
+ usage = normalizeHermesApiUsage(record.usage, hermesSessionId);
257
+ return;
258
+ }
259
+ case "tool.started":
260
+ case "tool.completed":
261
+ case "tool.failed":
262
+ case "tool.progress": {
263
+ publishHermesApiToolEvent(params.context, {
264
+ gatewayId: params.context.gatewayId,
265
+ sessionKey: params.sessionKey,
266
+ runId,
267
+ seq: seq += 1,
268
+ eventName: event.event,
269
+ record,
270
+ });
271
+ return;
272
+ }
273
+ case "error": {
274
+ throw new Error(stringValue(record.message) ?? "Hermes API stream error");
275
+ }
276
+ }
277
+ };
278
+ try {
279
+ while (true) {
280
+ if (params.context.abortSignal?.aborted) {
281
+ throw new Error("hermes_chat_aborted");
282
+ }
283
+ const { done, value } = await reader.read();
284
+ if (done) {
285
+ break;
286
+ }
287
+ buffer += decoder.decode(value, { stream: true });
288
+ const frames = splitCompleteSseFrames(buffer);
289
+ buffer = frames.remainder;
290
+ for (const frame of frames.completeFrames) {
291
+ const parsed = parseSseEvent(frame);
292
+ if (parsed) {
293
+ handleEvent(parsed);
294
+ }
295
+ }
296
+ }
297
+ const tail = buffer.trim();
298
+ if (tail) {
299
+ const parsed = parseSseEvent(tail);
300
+ if (parsed) {
301
+ handleEvent(parsed);
302
+ }
303
+ }
304
+ }
305
+ catch (error) {
306
+ if (params.context.abortSignal?.aborted || (error instanceof Error && error.name === "AbortError")) {
307
+ throw new Error("hermes_chat_aborted");
308
+ }
309
+ throw error;
310
+ }
311
+ finally {
312
+ try {
313
+ reader.releaseLock();
314
+ }
315
+ catch {
316
+ // The stream may already be closed after a network abort.
317
+ }
318
+ }
319
+ const output = sanitizeHermesChatOutput(finalOutput || deltaOutput).trim();
320
+ return {
321
+ output,
322
+ hermesSessionId,
323
+ usage: usage ?? { hermesSessionId },
324
+ };
325
+ }
326
+ function publishHermesApiToolEvent(context, params) {
327
+ const toolName = stringValue(params.record.tool_name) ?? stringValue(params.record.tool) ?? "hermes";
328
+ const preview = compactStringArray([
329
+ stringValue(params.record.preview),
330
+ stringValue(params.record.delta),
331
+ stringValue(params.record.text),
332
+ ]).join("\n");
333
+ const phase = hermesApiToolPhase(params.eventName);
334
+ const event = {
335
+ toolName,
336
+ phase,
337
+ text: preview,
338
+ isError: phase === "failed",
339
+ };
340
+ const toolCallId = `${params.runId}:hermes-api-tool-${params.seq}`;
341
+ context.publishEvent?.({
342
+ type: "event",
343
+ event: "chat",
344
+ payload: {
345
+ runId: params.runId,
346
+ sessionKey: params.sessionKey,
347
+ stream: "tool",
348
+ state: event.phase,
349
+ phase: event.phase,
350
+ role: "tool",
351
+ seq: params.seq,
352
+ ts: Date.now(),
353
+ data: {
354
+ phase: event.phase,
355
+ tool_call_id: toolCallId,
356
+ tool_name: toolName,
357
+ text: preview,
358
+ is_error: event.isError === true,
359
+ },
360
+ timelineEvents: [
361
+ buildToolInvocationUpdatedEvent({
362
+ gatewayId: params.gatewayId ?? "clawconnect",
363
+ sessionKey: params.sessionKey,
364
+ turnId: params.runId,
365
+ runId: params.runId,
366
+ toolInvocationId: toolCallId,
367
+ toolState: hermesToolState(event),
368
+ seq: params.seq,
369
+ turnSeq: params.seq,
370
+ content: [{
371
+ type: event.phase === "completed" || event.phase === "failed" ? "tool_result" : "tool_call",
372
+ toolName,
373
+ text: preview,
374
+ isError: event.isError === true,
375
+ }],
376
+ }),
377
+ ],
378
+ },
379
+ });
380
+ }
381
+ function hermesApiToolPhase(eventName) {
382
+ if (eventName === "tool.completed") {
383
+ return "completed";
384
+ }
385
+ if (eventName === "tool.failed") {
386
+ return "failed";
387
+ }
388
+ return "streaming";
389
+ }
390
+ function splitCompleteSseFrames(buffer) {
391
+ const normalized = buffer.replace(/\r\n/g, "\n");
392
+ const parts = normalized.split("\n\n");
393
+ const remainder = parts.pop() ?? "";
394
+ return { completeFrames: parts, remainder };
395
+ }
396
+ function parseSseEvent(frame) {
397
+ let event = "message";
398
+ const dataLines = [];
399
+ for (const line of frame.split(/\n/)) {
400
+ if (line.startsWith("event:")) {
401
+ event = line.slice("event:".length).trim() || "message";
402
+ }
403
+ else if (line.startsWith("data:")) {
404
+ dataLines.push(line.slice("data:".length).trimStart());
405
+ }
406
+ }
407
+ if (dataLines.length === 0) {
408
+ return undefined;
409
+ }
410
+ const rawData = dataLines.join("\n");
411
+ try {
412
+ return { event, data: JSON.parse(rawData) };
413
+ }
414
+ catch {
415
+ return { event, data: { text: rawData } };
416
+ }
417
+ }
418
+ function normalizeHermesApiUsage(value, hermesSessionId) {
419
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
420
+ return { hermesSessionId };
421
+ }
422
+ const record = value;
423
+ const inputTokens = numberValue(record.input_tokens);
424
+ return {
425
+ hermesSessionId,
426
+ contextUsage: inputTokens,
427
+ };
428
+ }
429
+ async function readJsonResponse(response) {
430
+ const text = await response.text();
431
+ if (!text.trim()) {
432
+ return {};
433
+ }
434
+ try {
435
+ return JSON.parse(text);
436
+ }
437
+ catch {
438
+ return { error: text };
439
+ }
440
+ }
441
+ function extractSessionId(payload) {
442
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
443
+ return undefined;
444
+ }
445
+ const record = payload;
446
+ const session = record.session && typeof record.session === "object" && !Array.isArray(record.session)
447
+ ? record.session
448
+ : {};
449
+ return stringValue(record.session_id) ?? stringValue(record.id) ?? stringValue(session.id);
450
+ }
451
+ function extractHermesApiError(payload, status) {
452
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
453
+ return `HTTP ${status}`;
454
+ }
455
+ const record = payload;
456
+ const error = record.error && typeof record.error === "object" && !Array.isArray(record.error)
457
+ ? record.error
458
+ : undefined;
459
+ return stringValue(error?.message)
460
+ ?? stringValue(record.message)
461
+ ?? stringValue(record.error)
462
+ ?? `HTTP ${status}`;
463
+ }
464
+ function buildHermesApiHeaders(config) {
465
+ return {
466
+ "Authorization": `Bearer ${config.apiKey}`,
467
+ "Content-Type": "application/json",
468
+ };
469
+ }
470
+ async function fetchWithTimeout(url, init, timeoutMs, abortSignal) {
471
+ const controller = new AbortController();
472
+ let abortHandler;
473
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
474
+ timeout.unref?.();
475
+ if (abortSignal) {
476
+ abortHandler = () => controller.abort();
477
+ abortSignal.addEventListener("abort", abortHandler, { once: true });
478
+ }
479
+ try {
480
+ return await fetch(url, { ...init, signal: controller.signal });
481
+ }
482
+ finally {
483
+ clearTimeout(timeout);
484
+ if (abortSignal && abortHandler) {
485
+ abortSignal.removeEventListener("abort", abortHandler);
486
+ }
487
+ }
488
+ }
489
+ function normalizeBaseUrl(value) {
490
+ return value.trim().replace(/\/+$/g, "");
491
+ }
492
+ function firstNonEmpty(...values) {
493
+ for (const value of values) {
494
+ const trimmed = value?.trim();
495
+ if (trimmed) {
496
+ return trimmed;
497
+ }
498
+ }
499
+ return undefined;
500
+ }
501
+ function stringValue(value) {
502
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
503
+ }
504
+ function numberValue(value) {
505
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
506
+ }
507
+ function isTruthyEnv(value) {
508
+ return /^(1|true|yes|on)$/i.test(value?.trim() ?? "");
509
+ }
510
+ //# sourceMappingURL=hermes-runtime-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-runtime-api-client.js","sourceRoot":"","sources":["../../../src/hermes/runtime/hermes-runtime-api-client.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,9 @@
1
1
  import type { LocalCommandContext } from "../../core/command-types.js";
2
- import { type HermesSessionItem } from "../hermes-session-store.js";
3
- import type { HermesChatResult, HermesToolLogEvent, HermesUsageSnapshot } from "./hermes-runtime-types.js";
2
+ import type { HermesChatResult, HermesUsageSnapshot } from "./hermes-runtime-types.js";
3
+ export { selectHermesSessionForCompletedChat } from "./hermes-runtime-history-completion.js";
4
+ export { parseHermesToolLogLine } from "./hermes-runtime-tool-log-watcher.js";
5
+ export { isHermesSlashCommandMessage } from "./hermes-runtime-slash-command.js";
4
6
  export declare function runHermesChat(params: unknown, context?: LocalCommandContext): Promise<HermesChatResult>;
5
- export declare function isHermesSlashCommandMessage(message: string): boolean;
6
- export declare function selectHermesSessionForCompletedChat(sessions: HermesSessionItem[], options?: {
7
- beforeSessions?: HermesSessionItem[];
8
- resume?: string;
9
- userMessage?: string;
10
- }): HermesSessionItem | undefined;
11
- export declare function runHermesSlashCommand(params: {
12
- message: string;
13
- sessionKey: string;
14
- hermesSessionId?: unknown;
15
- }): Promise<HermesChatResult>;
16
7
  export declare function buildHermesAssistantDeltaPayload(params: {
17
8
  runId: string;
18
9
  sessionKey: string;
@@ -37,5 +28,4 @@ export declare function buildHermesAssistantDeltaPayload(params: {
37
28
  }[];
38
29
  };
39
30
  };
40
- export declare function parseHermesToolLogLine(line: string): HermesToolLogEvent | null;
41
31
  export declare function buildHermesRuntimeContextHint(snapshot: HermesUsageSnapshot): string | undefined;