@fideliosai/adapter-hermes-local 0.0.4-canary.0

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 (50) hide show
  1. package/LICENSE +22 -0
  2. package/package.json +29 -0
  3. package/src/cli/format-event.d.ts +14 -0
  4. package/src/cli/format-event.d.ts.map +1 -0
  5. package/src/cli/format-event.js +52 -0
  6. package/src/cli/format-event.js.map +1 -0
  7. package/src/cli/index.d.ts +5 -0
  8. package/src/cli/index.d.ts.map +1 -0
  9. package/src/cli/index.js +5 -0
  10. package/src/cli/index.js.map +1 -0
  11. package/src/index.d.ts +28 -0
  12. package/src/index.d.ts.map +1 -0
  13. package/src/index.js +81 -0
  14. package/src/index.js.map +1 -0
  15. package/src/server/detect-model.d.ts +21 -0
  16. package/src/server/detect-model.d.ts.map +1 -0
  17. package/src/server/detect-model.js +63 -0
  18. package/src/server/detect-model.js.map +1 -0
  19. package/src/server/execute.d.ts +20 -0
  20. package/src/server/execute.d.ts.map +1 -0
  21. package/src/server/execute.js +389 -0
  22. package/src/server/execute.js.map +1 -0
  23. package/src/server/index.d.ts +16 -0
  24. package/src/server/index.d.ts.map +1 -0
  25. package/src/server/index.js +43 -0
  26. package/src/server/index.js.map +1 -0
  27. package/src/server/skills.d.ts +8 -0
  28. package/src/server/skills.d.ts.map +1 -0
  29. package/src/server/skills.js +179 -0
  30. package/src/server/skills.js.map +1 -0
  31. package/src/server/test.d.ts +9 -0
  32. package/src/server/test.d.ts.map +1 -0
  33. package/src/server/test.js +196 -0
  34. package/src/server/test.js.map +1 -0
  35. package/src/shared/constants.d.ts +31 -0
  36. package/src/shared/constants.d.ts.map +1 -0
  37. package/src/shared/constants.js +40 -0
  38. package/src/shared/constants.js.map +1 -0
  39. package/src/ui/build-config.d.ts +12 -0
  40. package/src/ui/build-config.d.ts.map +1 -0
  41. package/src/ui/build-config.js +47 -0
  42. package/src/ui/build-config.js.map +1 -0
  43. package/src/ui/index.d.ts +7 -0
  44. package/src/ui/index.d.ts.map +1 -0
  45. package/src/ui/index.js +7 -0
  46. package/src/ui/index.js.map +1 -0
  47. package/src/ui/parse-stdout.d.ts +25 -0
  48. package/src/ui/parse-stdout.d.ts.map +1 -0
  49. package/src/ui/parse-stdout.js +237 -0
  50. package/src/ui/parse-stdout.js.map +1 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Parse Hermes Agent stdout into TranscriptEntry objects for the FideliOS UI.
3
+ *
4
+ * Hermes CLI quiet-mode output patterns:
5
+ * Assistant: " โ”Š ๐Ÿ’ฌ {text}"
6
+ * Tool (TTY): " โ”Š {emoji} {verb:9} {detail} {duration}"
7
+ * Tool (pipe): " [done] โ”Š {emoji} {verb:9} {detail} {duration} ({total})"
8
+ * System: "[hermes] ..."
9
+ *
10
+ * We emit structured tool_call/tool_result pairs so FideliOS renders proper
11
+ * tool cards (with status icons, expand/collapse) instead of raw stdout blocks.
12
+ */
13
+ import { TOOL_OUTPUT_PREFIX } from "../shared/constants.js";
14
+ // โ”€โ”€ Kaomoji / noise stripping โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
15
+ /**
16
+ * Strip kawaii faces and decorative emoji from a tool summary line.
17
+ * Leaves meaningful emoji (๐Ÿ’ป for terminal, ๐Ÿ” for search, etc.) intact
18
+ * by only stripping parenthesized kaomoji like (๏ฝกโ—•โ€ฟโ—•๏ฝก).
19
+ */
20
+ function stripKaomoji(text) {
21
+ // Strip parenthesized kaomoji faces: (๏ฝกโ—•โ€ฟโ—•๏ฝก), (โ˜…ฯ‰โ˜…), etc.
22
+ return text.replace(/[(][^()]{2,20}[)]\s*/gu, "").trim();
23
+ }
24
+ // โ”€โ”€ Line classification โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
25
+ /** Check if a โ”Š line is an assistant message (โ”Š ๐Ÿ’ฌ ...). */
26
+ function isAssistantToolLine(stripped) {
27
+ return /^โ”Š\s*๐Ÿ’ฌ/.test(stripped);
28
+ }
29
+ /** Extract assistant text from a โ”Š ๐Ÿ’ฌ line. */
30
+ function extractAssistantText(line) {
31
+ return line.replace(/^[\sโ”Š]*๐Ÿ’ฌ\s*/, "").trim();
32
+ }
33
+ /**
34
+ * Parse a tool completion line into structured data.
35
+ *
36
+ * Handles both TTY and pipe formats:
37
+ * TTY: โ”Š ๐Ÿ’ป $ curl -s "..." 0.1s
38
+ * Pipe: [done] โ”Š ๐Ÿ’ป $ curl -s "..." 0.1s (0.5s)
39
+ */
40
+ function parseToolCompletionLine(line) {
41
+ // Strip leading whitespace and [done] prefix
42
+ let cleaned = line.trim().replace(/^\[done\]\s*/, "");
43
+ // Must start with โ”Š
44
+ if (!cleaned.startsWith(TOOL_OUTPUT_PREFIX))
45
+ return null;
46
+ // Remove โ”Š prefix and any leading kaomoji face
47
+ cleaned = cleaned.slice(TOOL_OUTPUT_PREFIX.length);
48
+ cleaned = stripKaomoji(cleaned).trim();
49
+ // Now format is: "{emoji} {verb:9} {detail} {duration}" or "{emoji} {verb:9} {detail} {duration} ({total})"
50
+ // Example: "๐Ÿ’ป $ curl -s ..." or "๐Ÿ” search pattern 0.1s"
51
+ // The verb+detail are separated by whitespace, duration is at the end
52
+ // Match: emoji + verb + detail + duration
53
+ // Duration pattern: N.Ns (possibly followed by (N.Ns))
54
+ const durationMatch = cleaned.match(/([\d.]+s)\s*(?:\([\d.]+s\))?\s*$/);
55
+ const duration = durationMatch ? durationMatch[1] : "";
56
+ // Remove duration from the end to get verb + detail
57
+ let verbAndDetail = durationMatch
58
+ ? cleaned.slice(0, cleaned.lastIndexOf(durationMatch[0])).trim()
59
+ : cleaned;
60
+ // Check for error suffixes
61
+ const hasError = /\[(?:exit \d+|error|full)\]/.test(verbAndDetail) ||
62
+ /\[error\]\s*$/.test(cleaned);
63
+ // The first token (after emoji) is the verb, rest is detail
64
+ // Verbs are always a single word or symbol ($ for terminal)
65
+ const parts = verbAndDetail.match(/^(\S+)\s+(.*)/);
66
+ if (!parts) {
67
+ return { name: "tool", detail: verbAndDetail, duration, hasError };
68
+ }
69
+ const verb = parts[1];
70
+ const detail = parts[2].trim();
71
+ // Map Hermes verbs to readable tool names
72
+ const nameMap = {
73
+ "$": "shell",
74
+ "exec": "shell",
75
+ "terminal": "shell",
76
+ "search": "search",
77
+ "fetch": "fetch",
78
+ "crawl": "crawl",
79
+ "navigate": "browser",
80
+ "snapshot": "browser",
81
+ "click": "browser",
82
+ "type": "browser",
83
+ "scroll": "browser",
84
+ "back": "browser",
85
+ "press": "browser",
86
+ "close": "browser",
87
+ "images": "browser",
88
+ "vision": "browser",
89
+ "read": "read",
90
+ "write": "write",
91
+ "patch": "patch",
92
+ "grep": "search",
93
+ "find": "search",
94
+ "plan": "plan",
95
+ "recall": "recall",
96
+ "proc": "process",
97
+ "delegate": "delegate",
98
+ "todo": "todo",
99
+ "memory": "memory",
100
+ "clarify": "clarify",
101
+ "session_search": "recall",
102
+ "code": "execute",
103
+ "execute": "execute",
104
+ "web_search": "search",
105
+ "web_extract": "fetch",
106
+ "browser_navigate": "browser",
107
+ "browser_click": "browser",
108
+ "browser_type": "browser",
109
+ "browser_snapshot": "browser",
110
+ "browser_vision": "browser",
111
+ "browser_scroll": "browser",
112
+ "browser_press": "browser",
113
+ "browser_back": "browser",
114
+ "browser_close": "browser",
115
+ "browser_get_images": "browser",
116
+ "read_file": "read",
117
+ "write_file": "write_file",
118
+ "search_files": "search",
119
+ "patch_file": "patch",
120
+ "execute_code": "execute",
121
+ };
122
+ const name = nameMap[verb.toLowerCase()] || verb;
123
+ return { name, detail, duration, hasError };
124
+ }
125
+ // โ”€โ”€ Synthetic tool ID generation โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
126
+ let toolCallCounter = 0;
127
+ /**
128
+ * Generate a synthetic toolUseId for pairing tool_call with tool_result.
129
+ * FideliOS uses this to match them in normalizeTranscript.
130
+ */
131
+ function syntheticToolUseId() {
132
+ return `hermes-tool-${++toolCallCounter}`;
133
+ }
134
+ // โ”€โ”€ Thinking detection โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
135
+ function isThinkingLine(line) {
136
+ return (line.includes("๐Ÿ’ญ") ||
137
+ line.startsWith("<thinking>") ||
138
+ line.startsWith("</thinking>") ||
139
+ line.startsWith("Thinking:"));
140
+ }
141
+ // โ”€โ”€ Main parser โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
142
+ /**
143
+ * Parse a single line of Hermes stdout into transcript entries.
144
+ *
145
+ * Emits structured tool_call/tool_result pairs (with synthetic IDs) so
146
+ * FideliOS renders proper tool cards with status icons and expand/collapse.
147
+ *
148
+ * @param line Raw stdout line from Hermes CLI
149
+ * @param ts ISO timestamp for the entry
150
+ * @returns Array of TranscriptEntry objects (may be empty)
151
+ */
152
+ export function parseHermesStdoutLine(line, ts) {
153
+ const trimmed = line.trim();
154
+ if (!trimmed)
155
+ return [];
156
+ // โ”€โ”€ System/adapter messages โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
157
+ if (trimmed.startsWith("[hermes]") || trimmed.startsWith("[fidelios]")) {
158
+ return [{ kind: "system", ts, text: trimmed }];
159
+ }
160
+ // โ”€โ”€ Non-quiet mode tool start lines: [tool] (kaomoji) emoji verb ... โ”€โ”€
161
+ // These are redundant โ€” the tool_call/tool_result pair arrives later from
162
+ // the โ”Š completion line. Skip them to avoid duplicate entries.
163
+ if (trimmed.startsWith("[tool]")) {
164
+ return [];
165
+ }
166
+ // โ”€โ”€ MCP / server init noise reclassified from stderr by wrappedOnLog โ”€โ”€
167
+ // Pattern: [2026-03-25T10:40:53.941Z] INFO: ...
168
+ // Emit as stderr so FideliOS groups them into the amber accordion.
169
+ if (/^\[\d{4}-\d{2}-\d{2}T/.test(trimmed)) {
170
+ return [{ kind: "stderr", ts, text: trimmed }];
171
+ }
172
+ // โ”€โ”€ Standalone spinner remnants: "๐Ÿ’ป Completed", "๐Ÿ’ป\nCompleted", etc. โ”€
173
+ // These are non-quiet mode spinner frame leftovers โ€” skip them.
174
+ if (/^\p{Emoji_Presentation}\s*(Completed|Running|Error)?\s*$/u.test(trimmed)) {
175
+ return [];
176
+ }
177
+ // โ”€โ”€ Session info line โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
178
+ if (trimmed.startsWith("session_id:")) {
179
+ return [{ kind: "system", ts, text: trimmed }];
180
+ }
181
+ // โ”€โ”€ Quiet-mode tool/message lines (prefixed with โ”Š) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
182
+ if (trimmed.includes(TOOL_OUTPUT_PREFIX)) {
183
+ // Assistant message: โ”Š ๐Ÿ’ฌ {text}
184
+ if (isAssistantToolLine(trimmed)) {
185
+ return [{ kind: "assistant", ts, text: extractAssistantText(trimmed) }];
186
+ }
187
+ // Tool completion: โ”Š {emoji} {verb} {detail} {duration}
188
+ const toolInfo = parseToolCompletionLine(trimmed);
189
+ if (toolInfo) {
190
+ const id = syntheticToolUseId();
191
+ const detailText = toolInfo.duration
192
+ ? `${toolInfo.detail} ${toolInfo.duration}`
193
+ : toolInfo.detail;
194
+ return [
195
+ {
196
+ kind: "tool_call",
197
+ ts,
198
+ name: toolInfo.name,
199
+ input: { detail: toolInfo.detail },
200
+ toolUseId: id,
201
+ },
202
+ {
203
+ kind: "tool_result",
204
+ ts,
205
+ toolUseId: id,
206
+ content: detailText,
207
+ isError: toolInfo.hasError,
208
+ },
209
+ ];
210
+ }
211
+ // Fallback: raw โ”Š line that doesn't match tool format
212
+ const stripped = trimmed
213
+ .replace(/^\[done\]\s*/, "")
214
+ .replace(new RegExp(`^${TOOL_OUTPUT_PREFIX.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*`), "")
215
+ .trim();
216
+ return [{ kind: "stdout", ts, text: stripped }];
217
+ }
218
+ // โ”€โ”€ Thinking blocks โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
219
+ if (isThinkingLine(trimmed)) {
220
+ return [
221
+ {
222
+ kind: "thinking",
223
+ ts,
224
+ text: trimmed.replace(/^๐Ÿ’ญ\s*/, ""),
225
+ },
226
+ ];
227
+ }
228
+ // โ”€โ”€ Error output โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
229
+ if (trimmed.startsWith("Error:") ||
230
+ trimmed.startsWith("ERROR:") ||
231
+ trimmed.startsWith("Traceback")) {
232
+ return [{ kind: "stderr", ts, text: trimmed }];
233
+ }
234
+ // โ”€โ”€ Regular assistant output โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
235
+ return [{ kind: "assistant", ts, text: trimmed }];
236
+ }
237
+ //# sourceMappingURL=parse-stdout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-stdout.js","sourceRoot":"","sources":["../../src/ui/parse-stdout.ts"],"names":[],"mappings":"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"}