@agents-tower/core 0.1.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 (178) hide show
  1. package/dist/adapters/claude.d.ts +2 -0
  2. package/dist/adapters/claude.js +43 -0
  3. package/dist/adapters/claude.js.map +1 -0
  4. package/dist/adapters/codex-cloud.d.ts +4 -0
  5. package/dist/adapters/codex-cloud.js +80 -0
  6. package/dist/adapters/codex-cloud.js.map +1 -0
  7. package/dist/adapters/codex-local.d.ts +17 -0
  8. package/dist/adapters/codex-local.js +180 -0
  9. package/dist/adapters/codex-local.js.map +1 -0
  10. package/dist/adapters/cursor-cloud.d.ts +2 -0
  11. package/dist/adapters/cursor-cloud.js +54 -0
  12. package/dist/adapters/cursor-cloud.js.map +1 -0
  13. package/dist/adapters/cursor-local.d.ts +2 -0
  14. package/dist/adapters/cursor-local.js +37 -0
  15. package/dist/adapters/cursor-local.js.map +1 -0
  16. package/dist/adapters/helpers.d.ts +15 -0
  17. package/dist/adapters/helpers.js +33 -0
  18. package/dist/adapters/helpers.js.map +1 -0
  19. package/dist/adapters/hermes.d.ts +2 -0
  20. package/dist/adapters/hermes.js +41 -0
  21. package/dist/adapters/hermes.js.map +1 -0
  22. package/dist/adapters/index.d.ts +2 -0
  23. package/dist/adapters/index.js +37 -0
  24. package/dist/adapters/index.js.map +1 -0
  25. package/dist/adapters/openclaw.d.ts +2 -0
  26. package/dist/adapters/openclaw.js +41 -0
  27. package/dist/adapters/openclaw.js.map +1 -0
  28. package/dist/adapters/presence.d.ts +2 -0
  29. package/dist/adapters/presence.js +36 -0
  30. package/dist/adapters/presence.js.map +1 -0
  31. package/dist/adapters/static-source.d.ts +15 -0
  32. package/dist/adapters/static-source.js +41 -0
  33. package/dist/adapters/static-source.js.map +1 -0
  34. package/dist/adapters/types.d.ts +44 -0
  35. package/dist/adapters/types.js +3 -0
  36. package/dist/adapters/types.js.map +1 -0
  37. package/dist/app-server.d.ts +94 -0
  38. package/dist/app-server.js +382 -0
  39. package/dist/app-server.js.map +1 -0
  40. package/dist/app-settings.d.ts +52 -0
  41. package/dist/app-settings.js +268 -0
  42. package/dist/app-settings.js.map +1 -0
  43. package/dist/appearance.d.ts +6 -0
  44. package/dist/appearance.js +84 -0
  45. package/dist/appearance.js.map +1 -0
  46. package/dist/aseprite.d.ts +4 -0
  47. package/dist/aseprite.js +42 -0
  48. package/dist/aseprite.js.map +1 -0
  49. package/dist/claude-agent-sdk.d.ts +44 -0
  50. package/dist/claude-agent-sdk.js +347 -0
  51. package/dist/claude-agent-sdk.js.map +1 -0
  52. package/dist/claude-home-cache.d.ts +61 -0
  53. package/dist/claude-home-cache.js +438 -0
  54. package/dist/claude-home-cache.js.map +1 -0
  55. package/dist/claude.d.ts +154 -0
  56. package/dist/claude.js +3495 -0
  57. package/dist/claude.js.map +1 -0
  58. package/dist/cloud.d.ts +2 -0
  59. package/dist/cloud.js +25 -0
  60. package/dist/cloud.js.map +1 -0
  61. package/dist/codex-command.d.ts +25 -0
  62. package/dist/codex-command.js +235 -0
  63. package/dist/codex-command.js.map +1 -0
  64. package/dist/codex-session-files.d.ts +8 -0
  65. package/dist/codex-session-files.js +509 -0
  66. package/dist/codex-session-files.js.map +1 -0
  67. package/dist/codex-thread-query.d.ts +14 -0
  68. package/dist/codex-thread-query.js +82 -0
  69. package/dist/codex-thread-query.js.map +1 -0
  70. package/dist/cursor-cloud-data.d.ts +34 -0
  71. package/dist/cursor-cloud-data.js +344 -0
  72. package/dist/cursor-cloud-data.js.map +1 -0
  73. package/dist/cursor-lib/local-discovery.d.ts +17 -0
  74. package/dist/cursor-lib/local-discovery.js +251 -0
  75. package/dist/cursor-lib/local-discovery.js.map +1 -0
  76. package/dist/cursor-lib/shared.d.ts +5 -0
  77. package/dist/cursor-lib/shared.js +88 -0
  78. package/dist/cursor-lib/shared.js.map +1 -0
  79. package/dist/cursor.d.ts +8 -0
  80. package/dist/cursor.js +1584 -0
  81. package/dist/cursor.js.map +1 -0
  82. package/dist/domain/codex-turn-semantics.d.ts +4 -0
  83. package/dist/domain/codex-turn-semantics.js +49 -0
  84. package/dist/domain/codex-turn-semantics.js.map +1 -0
  85. package/dist/domain/workload-policy.d.ts +8 -0
  86. package/dist/domain/workload-policy.js +268 -0
  87. package/dist/domain/workload-policy.js.map +1 -0
  88. package/dist/domain/workspace-activity.d.ts +10 -0
  89. package/dist/domain/workspace-activity.js +372 -0
  90. package/dist/domain/workspace-activity.js.map +1 -0
  91. package/dist/goal.d.ts +11 -0
  92. package/dist/goal.js +76 -0
  93. package/dist/goal.js.map +1 -0
  94. package/dist/hermes-hook-install.d.ts +12 -0
  95. package/dist/hermes-hook-install.js +335 -0
  96. package/dist/hermes-hook-install.js.map +1 -0
  97. package/dist/hermes.d.ts +97 -0
  98. package/dist/hermes.js +2446 -0
  99. package/dist/hermes.js.map +1 -0
  100. package/dist/index.d.ts +28 -0
  101. package/dist/index.js +47 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/live-monitor-lib/events.d.ts +43 -0
  104. package/dist/live-monitor-lib/events.js +1463 -0
  105. package/dist/live-monitor-lib/events.js.map +1 -0
  106. package/dist/live-monitor-lib/rollout-hooks.d.ts +13 -0
  107. package/dist/live-monitor-lib/rollout-hooks.js +253 -0
  108. package/dist/live-monitor-lib/rollout-hooks.js.map +1 -0
  109. package/dist/live-monitor.d.ts +102 -0
  110. package/dist/live-monitor.js +1461 -0
  111. package/dist/live-monitor.js.map +1 -0
  112. package/dist/local-thread-selection.d.ts +2 -0
  113. package/dist/local-thread-selection.js +58 -0
  114. package/dist/local-thread-selection.js.map +1 -0
  115. package/dist/openclaw.d.ts +41 -0
  116. package/dist/openclaw.js +715 -0
  117. package/dist/openclaw.js.map +1 -0
  118. package/dist/presence.d.ts +9 -0
  119. package/dist/presence.js +108 -0
  120. package/dist/presence.js.map +1 -0
  121. package/dist/project-identity.d.ts +7 -0
  122. package/dist/project-identity.js +162 -0
  123. package/dist/project-identity.js.map +1 -0
  124. package/dist/project-paths.d.ts +23 -0
  125. package/dist/project-paths.js +394 -0
  126. package/dist/project-paths.js.map +1 -0
  127. package/dist/project-storage.d.ts +7 -0
  128. package/dist/project-storage.js +79 -0
  129. package/dist/project-storage.js.map +1 -0
  130. package/dist/room-config.d.ts +21 -0
  131. package/dist/room-config.js +230 -0
  132. package/dist/room-config.js.map +1 -0
  133. package/dist/services/project-discovery.d.ts +1 -0
  134. package/dist/services/project-discovery.js +16 -0
  135. package/dist/services/project-discovery.js.map +1 -0
  136. package/dist/services/project-live-monitor.d.ts +1 -0
  137. package/dist/services/project-live-monitor.js +6 -0
  138. package/dist/services/project-live-monitor.js.map +1 -0
  139. package/dist/services/project-snapshot-coordinator.d.ts +49 -0
  140. package/dist/services/project-snapshot-coordinator.js +152 -0
  141. package/dist/services/project-snapshot-coordinator.js.map +1 -0
  142. package/dist/services/refresh-scheduler.d.ts +8 -0
  143. package/dist/services/refresh-scheduler.js +44 -0
  144. package/dist/services/refresh-scheduler.js.map +1 -0
  145. package/dist/services/snapshot-assembler.d.ts +8 -0
  146. package/dist/services/snapshot-assembler.js +167 -0
  147. package/dist/services/snapshot-assembler.js.map +1 -0
  148. package/dist/services/thread-store.d.ts +4 -0
  149. package/dist/services/thread-store.js +8 -0
  150. package/dist/services/thread-store.js.map +1 -0
  151. package/dist/snapshot-lib/activity-summary.d.ts +3 -0
  152. package/dist/snapshot-lib/activity-summary.js +220 -0
  153. package/dist/snapshot-lib/activity-summary.js.map +1 -0
  154. package/dist/snapshot-lib/dashboard-builder.d.ts +21 -0
  155. package/dist/snapshot-lib/dashboard-builder.js +146 -0
  156. package/dist/snapshot-lib/dashboard-builder.js.map +1 -0
  157. package/dist/snapshot-lib/thread-summary.d.ts +27 -0
  158. package/dist/snapshot-lib/thread-summary.js +953 -0
  159. package/dist/snapshot-lib/thread-summary.js.map +1 -0
  160. package/dist/snapshot.d.ts +2 -0
  161. package/dist/snapshot.js +21 -0
  162. package/dist/snapshot.js.map +1 -0
  163. package/dist/types.d.ts +368 -0
  164. package/dist/types.js +3 -0
  165. package/dist/types.js.map +1 -0
  166. package/dist/utils/json.d.ts +4 -0
  167. package/dist/utils/json.js +29 -0
  168. package/dist/utils/json.js.map +1 -0
  169. package/dist/utils/text.d.ts +3 -0
  170. package/dist/utils/text.js +26 -0
  171. package/dist/utils/text.js.map +1 -0
  172. package/dist/web-search.d.ts +1 -0
  173. package/dist/web-search.js +52 -0
  174. package/dist/web-search.js.map +1 -0
  175. package/dist/workload.d.ts +1 -0
  176. package/dist/workload.js +12 -0
  177. package/dist/workload.js.map +1 -0
  178. package/package.json +19 -0
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHermesHooksDir = getHermesHooksDir;
4
+ exports.resolveHermesHome = resolveHermesHome;
5
+ exports.installHermesAgentsOfficePlugin = installHermesAgentsOfficePlugin;
6
+ const promises_1 = require("node:fs/promises");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
9
+ const app_settings_1 = require("./app-settings");
10
+ const HERMES_PLUGIN_NAME = "codex-agents-office";
11
+ function expandHomePath(path) {
12
+ if (path === "~") {
13
+ return (0, node_os_1.homedir)();
14
+ }
15
+ if (path.startsWith("~/") || path.startsWith("~\\")) {
16
+ return (0, node_path_1.join)((0, node_os_1.homedir)(), path.slice(2));
17
+ }
18
+ return path;
19
+ }
20
+ function getHermesHooksDir() {
21
+ return (0, node_path_1.join)((0, app_settings_1.getAppDataDirectory)(), "hermes-hooks");
22
+ }
23
+ function resolveHermesHome(input) {
24
+ const explicit = input && input.trim().length > 0
25
+ ? input
26
+ : process.env.HERMES_HOME;
27
+ return (0, node_path_1.resolve)(expandHomePath(explicit && explicit.trim().length > 0 ? explicit : (0, node_path_1.join)((0, node_os_1.homedir)(), ".hermes")));
28
+ }
29
+ function pluginManifestSource() {
30
+ return `name: ${HERMES_PLUGIN_NAME}
31
+ version: "0.1.0"
32
+ description: "Streams Hermes Agent lifecycle hooks into Agents Office."
33
+ author: "Codex Agents Office"
34
+ kind: standalone
35
+ provides_hooks:
36
+ - on_session_start
37
+ - pre_gateway_dispatch
38
+ - pre_llm_call
39
+ - post_llm_call
40
+ - pre_verify
41
+ - transform_llm_output
42
+ - pre_tool_call
43
+ - post_tool_call
44
+ - transform_tool_result
45
+ - transform_terminal_output
46
+ - pre_api_request
47
+ - post_api_request
48
+ - pre_approval_request
49
+ - post_approval_response
50
+ - on_session_end
51
+ - on_session_finalize
52
+ - on_session_reset
53
+ - subagent_start
54
+ - subagent_stop
55
+ `;
56
+ }
57
+ function pluginPythonSource() {
58
+ return String.raw `import datetime
59
+ import json
60
+ import os
61
+ from pathlib import Path
62
+
63
+ _PLUGIN_DIR = Path(__file__).resolve().parent
64
+ _CONFIG_PATH = _PLUGIN_DIR / "agents_office_config.json"
65
+ _HOOKS = [
66
+ "on_session_start",
67
+ "pre_gateway_dispatch",
68
+ "pre_llm_call",
69
+ "post_llm_call",
70
+ "pre_verify",
71
+ "transform_llm_output",
72
+ "pre_tool_call",
73
+ "post_tool_call",
74
+ "transform_tool_result",
75
+ "transform_terminal_output",
76
+ "pre_api_request",
77
+ "post_api_request",
78
+ "pre_approval_request",
79
+ "post_approval_response",
80
+ "on_session_end",
81
+ "on_session_finalize",
82
+ "on_session_reset",
83
+ "subagent_start",
84
+ "subagent_stop",
85
+ ]
86
+
87
+
88
+ def _load_config():
89
+ try:
90
+ with _CONFIG_PATH.open("r", encoding="utf-8") as handle:
91
+ data = json.load(handle)
92
+ if isinstance(data, dict):
93
+ return data
94
+ except Exception:
95
+ pass
96
+ return {}
97
+
98
+
99
+ def _configured_hook_dir():
100
+ config = _load_config()
101
+ return config.get("hook_dir") or os.environ.get("CODEX_AGENTS_OFFICE_HERMES_HOOK_DIR")
102
+
103
+
104
+ def _write_status(event_name, error=None):
105
+ try:
106
+ hook_dir = _configured_hook_dir()
107
+ if not hook_dir:
108
+ return None
109
+ path = Path(hook_dir)
110
+ path.mkdir(parents=True, exist_ok=True)
111
+ status = {
112
+ "hook_source": "hermes-plugin-hooks",
113
+ "status_event_name": event_name,
114
+ "timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat(),
115
+ "plugin_dir": str(_PLUGIN_DIR),
116
+ "config_path": str(_CONFIG_PATH),
117
+ "hook_dir": str(path),
118
+ "process_cwd": os.getcwd(),
119
+ "hermes_home": os.environ.get("HERMES_HOME"),
120
+ "pid": os.getpid(),
121
+ "hooks": list(_HOOKS),
122
+ }
123
+ if error is not None:
124
+ status["error"] = str(error)
125
+ with (path / "codex-agents-office.status.json").open("w", encoding="utf-8") as handle:
126
+ json.dump(status, handle, ensure_ascii=False, default=repr, indent=2)
127
+ handle.write("\n")
128
+ except Exception:
129
+ return None
130
+ return None
131
+
132
+
133
+ def _jsonable(value, depth=0):
134
+ if depth > 5:
135
+ return repr(value)
136
+ if isinstance(value, str):
137
+ return value if len(value) <= 3000 else value[:3000] + "...[truncated]"
138
+ if value is None or isinstance(value, (int, float, bool)):
139
+ return value
140
+ if isinstance(value, (list, tuple, set)):
141
+ return [_jsonable(entry, depth + 1) for entry in list(value)[:20]]
142
+ if isinstance(value, dict):
143
+ return {
144
+ str(key): _jsonable(entry, depth + 1)
145
+ for key, entry in list(value.items())[:60]
146
+ }
147
+ if hasattr(value, "__dict__"):
148
+ return {
149
+ "_type": value.__class__.__name__,
150
+ **{
151
+ str(key): _jsonable(entry, depth + 1)
152
+ for key, entry in list(vars(value).items())[:60]
153
+ if not str(key).startswith("_")
154
+ },
155
+ }
156
+ return repr(value)
157
+
158
+
159
+ def _session_id_from(event_name, payload):
160
+ for key in (
161
+ "session_id",
162
+ "session_key",
163
+ "parent_session_id",
164
+ "child_session_id",
165
+ "conversation_id",
166
+ "task_id",
167
+ "tool_call_id",
168
+ ):
169
+ value = payload.get(key)
170
+ if isinstance(value, str) and value.strip():
171
+ return value.strip()
172
+ event = payload.get("event")
173
+ if isinstance(event, dict):
174
+ for key in ("session_id", "session_key", "conversation_id", "id"):
175
+ value = event.get(key)
176
+ if isinstance(value, str) and value.strip():
177
+ return value.strip()
178
+ return "process-%s" % os.getpid()
179
+
180
+
181
+ def _record(event_name, **kwargs):
182
+ try:
183
+ hook_dir = _configured_hook_dir()
184
+ if not hook_dir:
185
+ return None
186
+
187
+ payload = {str(key): _jsonable(value) for key, value in kwargs.items()}
188
+ session_id = _session_id_from(event_name, payload)
189
+ cwd = (
190
+ os.environ.get("HERMES_CWD")
191
+ or os.environ.get("TERMINAL_CWD")
192
+ or os.getcwd()
193
+ )
194
+ record = {
195
+ "hook_source": "hermes-plugin-hooks",
196
+ "hook_event_name": event_name,
197
+ "timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat(),
198
+ "session_id": session_id,
199
+ "cwd": cwd,
200
+ "process_cwd": os.getcwd(),
201
+ "hermes_home": os.environ.get("HERMES_HOME"),
202
+ "pid": os.getpid(),
203
+ "payload": payload,
204
+ }
205
+
206
+ path = Path(hook_dir)
207
+ path.mkdir(parents=True, exist_ok=True)
208
+ out = path / ("%s.jsonl" % session_id.replace("/", "_").replace("\\", "_"))
209
+ with out.open("a", encoding="utf-8") as handle:
210
+ handle.write(json.dumps(record, ensure_ascii=False, default=repr) + "\n")
211
+ except Exception as exc:
212
+ _write_status("record_error", exc)
213
+ return None
214
+ return None
215
+
216
+
217
+ def _make_hook(event_name):
218
+ def _hook(**kwargs):
219
+ return _record(event_name, **kwargs)
220
+ return _hook
221
+
222
+
223
+ def register(ctx):
224
+ try:
225
+ for event_name in _HOOKS:
226
+ ctx.register_hook(event_name, _make_hook(event_name))
227
+ _write_status("registered")
228
+ except Exception as exc:
229
+ _write_status("register_error", exc)
230
+ raise
231
+ `;
232
+ }
233
+ function pluginConfigSource(hookDir) {
234
+ return `${JSON.stringify({ hook_dir: hookDir }, null, 2)}\n`;
235
+ }
236
+ function pluginsBlockEndIndex(lines, pluginsIndex) {
237
+ for (let index = pluginsIndex + 1; index < lines.length; index += 1) {
238
+ const line = lines[index];
239
+ if (line.trim().length === 0 || line.trimStart().startsWith("#")) {
240
+ continue;
241
+ }
242
+ if (/^\S/.test(line)) {
243
+ return index;
244
+ }
245
+ }
246
+ return lines.length;
247
+ }
248
+ function pluginListIndex(lines, pluginsIndex, name) {
249
+ const endIndex = pluginsBlockEndIndex(lines, pluginsIndex);
250
+ return lines.findIndex((line, index) => index > pluginsIndex
251
+ && index < endIndex
252
+ && new RegExp(`^\\s{2}${name}:\\s*$`).test(line));
253
+ }
254
+ function pluginListContains(lines, listIndex) {
255
+ if (listIndex < 0) {
256
+ return false;
257
+ }
258
+ for (let index = listIndex + 1; index < lines.length; index += 1) {
259
+ const line = lines[index];
260
+ if (/^\s{2}\S/.test(line) || /^\S/.test(line)) {
261
+ return false;
262
+ }
263
+ if (new RegExp(`^\\s*-\\s*${HERMES_PLUGIN_NAME}\\s*$`).test(line)) {
264
+ return true;
265
+ }
266
+ }
267
+ return false;
268
+ }
269
+ function removePluginFromList(lines, listIndex) {
270
+ if (listIndex < 0) {
271
+ return;
272
+ }
273
+ for (let index = listIndex + 1; index < lines.length; index += 1) {
274
+ const line = lines[index];
275
+ if (/^\s{2}\S/.test(line) || /^\S/.test(line)) {
276
+ return;
277
+ }
278
+ if (new RegExp(`^\\s*-\\s*${HERMES_PLUGIN_NAME}\\s*$`).test(line)) {
279
+ lines.splice(index, 1);
280
+ index -= 1;
281
+ }
282
+ }
283
+ }
284
+ function removeMalformedPluginRootEntries(lines, pluginsIndex) {
285
+ const endIndex = pluginsBlockEndIndex(lines, pluginsIndex);
286
+ for (let index = pluginsIndex + 1; index < endIndex; index += 1) {
287
+ const line = lines[index];
288
+ if (new RegExp(`^\\s{2}-\\s*${HERMES_PLUGIN_NAME}\\s*$`).test(line)) {
289
+ lines.splice(index, 1);
290
+ index -= 1;
291
+ }
292
+ }
293
+ }
294
+ function enablePluginInConfig(raw) {
295
+ const lines = raw.split(/\r?\n/);
296
+ const pluginsIndex = lines.findIndex((line) => /^plugins:\s*$/.test(line));
297
+ if (pluginsIndex < 0) {
298
+ return `${raw.replace(/\s*$/, "")}\n\nplugins:\n enabled:\n - ${HERMES_PLUGIN_NAME}\n`;
299
+ }
300
+ removeMalformedPluginRootEntries(lines, pluginsIndex);
301
+ removePluginFromList(lines, pluginListIndex(lines, pluginsIndex, "disabled"));
302
+ const enabledIndex = pluginListIndex(lines, pluginsIndex, "enabled");
303
+ if (pluginListContains(lines, enabledIndex)) {
304
+ return `${lines.join("\n").replace(/\s*$/, "")}\n`;
305
+ }
306
+ if (enabledIndex >= 0) {
307
+ lines.splice(enabledIndex + 1, 0, ` - ${HERMES_PLUGIN_NAME}`);
308
+ return `${lines.join("\n").replace(/\s*$/, "")}\n`;
309
+ }
310
+ lines.splice(pluginsIndex + 1, 0, " enabled:", ` - ${HERMES_PLUGIN_NAME}`);
311
+ return `${lines.join("\n").replace(/\s*$/, "")}\n`;
312
+ }
313
+ async function installHermesAgentsOfficePlugin(input = {}) {
314
+ const hermesHome = resolveHermesHome(input.hermesHome);
315
+ const hookDir = (0, node_path_1.resolve)(expandHomePath(input.hookDir && input.hookDir.trim().length > 0
316
+ ? input.hookDir
317
+ : getHermesHooksDir()));
318
+ const pluginDir = (0, node_path_1.join)(hermesHome, "plugins", HERMES_PLUGIN_NAME);
319
+ const configPath = (0, node_path_1.join)(hermesHome, "config.yaml");
320
+ await (0, promises_1.mkdir)(pluginDir, { recursive: true });
321
+ await (0, promises_1.mkdir)(hookDir, { recursive: true });
322
+ await (0, promises_1.writeFile)((0, node_path_1.join)(pluginDir, "plugin.yaml"), pluginManifestSource(), "utf8");
323
+ await (0, promises_1.writeFile)((0, node_path_1.join)(pluginDir, "__init__.py"), pluginPythonSource(), "utf8");
324
+ await (0, promises_1.writeFile)((0, node_path_1.join)(pluginDir, "agents_office_config.json"), pluginConfigSource(hookDir), "utf8");
325
+ await (0, promises_1.mkdir)((0, node_path_1.dirname)(configPath), { recursive: true });
326
+ const existingConfig = await (0, promises_1.readFile)(configPath, "utf8").catch(() => "");
327
+ await (0, promises_1.writeFile)(configPath, enablePluginInConfig(existingConfig), "utf8");
328
+ return {
329
+ hermesHome,
330
+ pluginDir,
331
+ hookDir,
332
+ configPath
333
+ };
334
+ }
335
+ //# sourceMappingURL=hermes-hook-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-hook-install.js","sourceRoot":"","sources":["../src/hermes-hook-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { type DiscoveredProject } from "./project-paths";
2
+ import type { ActivityState, AgentActivityEvent, DashboardAgent, DashboardEvent } from "./types";
3
+ interface HermesStoredSession {
4
+ id: string;
5
+ source: string | null;
6
+ model: string | null;
7
+ parentSessionId: string | null;
8
+ parentEndedAt: number | null;
9
+ parentEndReason: string | null;
10
+ startedAt: number;
11
+ endedAt: number | null;
12
+ endReason: string | null;
13
+ messageCount: number;
14
+ toolCallCount: number;
15
+ title: string | null;
16
+ systemPrompt: string | null;
17
+ lastActive: number;
18
+ home: string;
19
+ storage: "sqlite";
20
+ messages: HermesStoredMessage[];
21
+ }
22
+ interface HermesStoredMessage {
23
+ id: number | string;
24
+ role: string | null;
25
+ content: unknown;
26
+ toolCalls: unknown;
27
+ toolName: string | null;
28
+ toolCallId: string | null;
29
+ timestamp: number;
30
+ finishReason: string | null;
31
+ reasoning: string | null;
32
+ reasoningContent: string | null;
33
+ }
34
+ interface HermesSessionSummary {
35
+ state: ActivityState;
36
+ isOngoing: boolean;
37
+ detail: string;
38
+ paths: string[];
39
+ activityEvent: AgentActivityEvent | null;
40
+ latestMessage: string | null;
41
+ updatedAtMs: number;
42
+ stoppedAtMs: number | null;
43
+ }
44
+ interface HermesHookRecord {
45
+ sessionId: string;
46
+ eventName: string;
47
+ timestampMs: number;
48
+ cwd: string | null;
49
+ processCwd: string | null;
50
+ payload: Record<string, unknown>;
51
+ raw: Record<string, unknown>;
52
+ }
53
+ export declare function loadHermesProjectSnapshotData(projectRoot: string, limit?: number): Promise<{
54
+ agents: DashboardAgent[];
55
+ events: DashboardEvent[];
56
+ notes: string[];
57
+ }>;
58
+ export declare function discoverHermesProjects(limit?: number): Promise<DiscoveredProject[]>;
59
+ export declare function loadRoamingHermesSnapshotData(input: {
60
+ anchorProjectRoot: string;
61
+ knownProjectRoots: string[];
62
+ limit?: number;
63
+ }): Promise<{
64
+ agents: DashboardAgent[];
65
+ events: DashboardEvent[];
66
+ notes: string[];
67
+ }>;
68
+ export declare function summarizeHermesSessionForTest(input: {
69
+ session: HermesStoredSession;
70
+ projectRoot: string;
71
+ cwd?: string | null;
72
+ active?: boolean;
73
+ paths?: string[];
74
+ now?: number;
75
+ }): HermesSessionSummary;
76
+ export declare function summarizeHermesHookSessionForTest(input: {
77
+ records: Array<Partial<HermesHookRecord> & {
78
+ eventName: string;
79
+ payload: Record<string, unknown>;
80
+ }>;
81
+ projectRoot: string;
82
+ paths?: string[];
83
+ now?: number;
84
+ }): HermesSessionSummary;
85
+ export declare function isHermesGatewayDaemonForTest(argv: string[]): boolean;
86
+ export declare function isHermesRuntimeHomeProcessForTest(argv: string[], cwd: string | null): boolean;
87
+ export declare function isHermesCompressionContinuationForTest(input: {
88
+ parentSessionId?: string | null;
89
+ parentEndedAt?: number | null;
90
+ parentEndReason?: string | null;
91
+ startedAt?: number;
92
+ }): boolean;
93
+ export declare function currentHermesSessionProjectRootForTest(input: {
94
+ session: HermesStoredSession;
95
+ activeCwd?: string | null;
96
+ }): Promise<string | null>;
97
+ export {};