hermes-web-ui 0.3.8 → 0.4.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 (75) hide show
  1. package/README.md +7 -10
  2. package/dist/client/assets/{Add-s316k4Av.js → Add-BChxDDdy.js} +1 -1
  3. package/dist/client/assets/{Button-BkA_RI8a.js → Button-uvjCWO-i.js} +1 -1
  4. package/dist/client/assets/{ChannelsView-DPmPn8DW.js → ChannelsView-D3a0g0rb.js} +1 -1
  5. package/dist/client/assets/{ChatView-DEtziOPB.js → ChatView-T8LH7dwU.js} +1 -1
  6. package/dist/client/assets/{Close-CrLD0IXG.js → Close-DbXijZpL.js} +1 -1
  7. package/dist/client/assets/{FormItem-CQLdFrl9.js → FormItem-BRiLD3TC.js} +1 -1
  8. package/dist/client/assets/{GatewaysView-CC1Y0tZZ.js → GatewaysView-rfzh1nqy.js} +1 -1
  9. package/dist/client/assets/{Input-nXKlujwJ.js → Input-CjlUbV0M.js} +1 -1
  10. package/dist/client/assets/{InputNumber-DLZwwIyX.js → InputNumber-CPEjoOAv.js} +1 -1
  11. package/dist/client/assets/{JobsView-BC0bBrJO.js → JobsView-D6AFr9Xe.js} +2 -2
  12. package/dist/client/assets/{LoginView-PqpFR9bV.js → LoginView-DJB_TSHN.js} +1 -1
  13. package/dist/client/assets/{LogsView-DtR88N0b.js → LogsView-Ul8pAp42.js} +1 -1
  14. package/dist/client/assets/{MarkdownRenderer-BSLfTurm.js → MarkdownRenderer-CY7d2L7Z.js} +1 -1
  15. package/dist/client/assets/{MemoryView-CJRWnePL.js → MemoryView-BR5Dl_fa.js} +1 -1
  16. package/dist/client/assets/{Modal-Bp9RK8LZ.js → Modal-DDUFP8vh.js} +1 -1
  17. package/dist/client/assets/{ModelsView-7Obe34Cz.js → ModelsView-DAi9Jdmk.js} +1 -1
  18. package/dist/client/assets/{Popconfirm-DTdUi7r_.js → Popconfirm-Cnb_uQVo.js} +1 -1
  19. package/dist/client/assets/{Popover-_M3o0B7L.js → Popover-DiVI0l6E.js} +1 -1
  20. package/dist/client/assets/{ProfilesView-1_GmRx-S.js → ProfilesView-BB0Zrfhi.js} +1 -1
  21. package/dist/client/assets/{Select-aHPR3urY.js → Select-BqUA1wxE.js} +1 -1
  22. package/dist/client/assets/{SettingRow-DKasLuS5.js → SettingRow-CK0bHtaz.js} +1 -1
  23. package/dist/client/assets/{SettingsView-DZCA7_CM.js → SettingsView-BKKk44FG.js} +1 -1
  24. package/dist/client/assets/{SkillsView-Dk7O05cK.js → SkillsView-whSlyc23.js} +1 -1
  25. package/dist/client/assets/{Spin-Bt_9cTiO.js → Spin-DwHJdgNz.js} +1 -1
  26. package/dist/client/assets/{Suffix-XaH8SDbR.js → Suffix-D6x-7akR.js} +1 -1
  27. package/dist/client/assets/{Switch-D1_psmjT.js → Switch-BvHRSSqt.js} +1 -1
  28. package/dist/client/assets/{Tag-3FaOhoJN.js → Tag-BMMlXaEi.js} +1 -1
  29. package/dist/client/assets/{TerminalView-DNU7oQxK.js → TerminalView-el6o2Q0a.js} +1 -1
  30. package/dist/client/assets/{Tooltip-YHrHWGPa.js → Tooltip-BM4wl764.js} +1 -1
  31. package/dist/client/assets/{UsageView-COCrOiiV.js → UsageView-DQ_YKoEV.js} +1 -1
  32. package/dist/client/assets/{Warning-B6CM9aBl.js → Warning-CEC7rgvY.js} +1 -1
  33. package/dist/client/assets/{_plugin-vue_export-helper-BGG8ORDx.js → _plugin-vue_export-helper-DgUZPfuZ.js} +1 -1
  34. package/dist/client/assets/app-DPUhLGXq.js +1 -0
  35. package/dist/client/assets/{app-B7ktf7Fh.js → app-DUt8TNq3.js} +1 -1
  36. package/dist/client/assets/{browser-f5W8abIG.js → browser-vxCOMmsq.js} +1 -1
  37. package/dist/client/assets/{chat-6q6pkzEW.js → chat-i_Ge_Lfr.js} +2 -2
  38. package/dist/client/assets/composables-jrQPIjcq.js +1 -0
  39. package/dist/client/assets/{fade-in.cssr-ifHK7yH1.js → fade-in.cssr-DVg2CkO3.js} +1 -1
  40. package/dist/client/assets/{index-CSCYx7ux.js → index-COwJ2oY0.js} +1 -1
  41. package/dist/client/assets/{jobs-DObWfhbO.js → jobs-Czr1RcSG.js} +1 -1
  42. package/dist/client/assets/{light-DgLcPjgU.js → light-3rSjNeC-.js} +1 -1
  43. package/dist/client/assets/{light-CxjyoF0s.js → light-CKDlpgGU.js} +1 -1
  44. package/dist/client/assets/{light-D1yfed_s.js → light-CiIDFs7y.js} +1 -1
  45. package/dist/client/assets/{light-TGFKT-UB.js → light-CoJqT8Vu.js} +1 -1
  46. package/dist/client/assets/{light-D_3MwJj1.js → light-DPRJ1OEN.js} +1 -1
  47. package/dist/client/assets/{light-DWy-mwyK.js → light-vTpJevRf.js} +1 -1
  48. package/dist/client/assets/{models-DQ4CT-vv.js → models-BzEeJuoO.js} +1 -1
  49. package/dist/client/assets/{pinia-DcAkZ8vx.js → pinia-BoNLlsLy.js} +1 -1
  50. package/dist/client/assets/{profiles-DzkigJwq.js → profiles-B-DFTmc2.js} +1 -1
  51. package/dist/client/assets/{router-D8sJ39Io.js → router-HHMeDEaP.js} +2 -2
  52. package/dist/client/assets/{sessions-Dg8n9PBo.js → sessions-BmxS_BoH.js} +1 -1
  53. package/dist/client/assets/{skills-BehzdECn.js → skills-Be8Mzr1r.js} +1 -1
  54. package/dist/client/assets/{use-message-DBz2JSTt.js → use-message-DBTY4945.js} +1 -1
  55. package/dist/client/assets/{useTheme-UdVT814n.js → useTheme-D58Cg7k2.js} +1 -1
  56. package/dist/client/index.html +27 -27
  57. package/dist/server/index.js +19 -199
  58. package/dist/server/routes/health.d.ts +4 -0
  59. package/dist/server/routes/health.js +109 -0
  60. package/dist/server/routes/hermes/group-chat.d.ts +2 -0
  61. package/dist/server/routes/hermes/group-chat.js +112 -101
  62. package/dist/server/routes/update.d.ts +2 -0
  63. package/dist/server/routes/update.js +69 -0
  64. package/dist/server/services/auth.js +1 -1
  65. package/dist/server/services/gateway-bootstrap.d.ts +2 -0
  66. package/dist/server/services/gateway-bootstrap.js +51 -0
  67. package/dist/server/services/hermes/group-chat/agent-clients.d.ts +133 -0
  68. package/dist/server/services/hermes/group-chat/agent-clients.js +364 -0
  69. package/dist/server/services/hermes/group-chat/index.d.ts +72 -0
  70. package/dist/server/services/hermes/group-chat/index.js +307 -0
  71. package/dist/server/services/shutdown.d.ts +1 -0
  72. package/dist/server/services/shutdown.js +37 -0
  73. package/package.json +1 -1
  74. package/dist/client/assets/app-BPvTl2-V.js +0 -1
  75. package/dist/client/assets/composables-xV7dhNpf.js +0 -1
@@ -1,135 +1,146 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.groupChatRoutes = void 0;
7
+ exports.setGroupChatServer = setGroupChatServer;
40
8
  const router_1 = __importDefault(require("@koa/router"));
41
- const roomsDb = __importStar(require("../../services/group-chat/rooms-db"));
42
9
  exports.groupChatRoutes = new router_1.default();
43
- // ---------------------------------------------------------------------------
44
- // Rooms
45
- // ---------------------------------------------------------------------------
46
- exports.groupChatRoutes.get('/api/hermes/group-chat/rooms', async (ctx) => {
47
- const rooms = roomsDb.listRooms();
48
- ctx.body = { rooms };
49
- });
10
+ let chatServer = null;
11
+ function setGroupChatServer(server) {
12
+ chatServer = server;
13
+ }
14
+ function generateId() {
15
+ return Date.now().toString(36) + Math.random().toString(36).slice(2, 8);
16
+ }
17
+ // Create room
50
18
  exports.groupChatRoutes.post('/api/hermes/group-chat/rooms', async (ctx) => {
51
- const { name } = ctx.request.body;
52
- if (!name?.trim()) {
19
+ if (!chatServer) {
20
+ ctx.status = 503;
21
+ ctx.body = { error: 'Group chat not initialized' };
22
+ return;
23
+ }
24
+ const { name, inviteCode, agents } = ctx.request.body;
25
+ if (!name || !inviteCode) {
53
26
  ctx.status = 400;
54
- ctx.body = { error: 'name is required' };
27
+ ctx.body = { error: 'name and inviteCode are required' };
55
28
  return;
56
29
  }
57
- const room = roomsDb.createRoom(name.trim());
58
- ctx.body = { room };
30
+ const roomId = generateId();
31
+ const storage = chatServer.getStorage();
32
+ storage.saveRoom(roomId, name, inviteCode);
33
+ // Save agents to DB and auto-connect via Socket.IO
34
+ const addedAgents = [];
35
+ for (const a of agents || []) {
36
+ const agentId = generateId();
37
+ const agent = storage.addRoomAgent(roomId, agentId, a.profile, a.name || a.profile, a.description || '', a.invited ? 1 : 0);
38
+ addedAgents.push(agent);
39
+ try {
40
+ const client = await chatServer.agentClients.createAgent({
41
+ profile: agent.profile,
42
+ name: agent.name,
43
+ description: agent.description,
44
+ invited: agent.invited,
45
+ });
46
+ await chatServer.agentClients.addAgentToRoom(roomId, client);
47
+ }
48
+ catch (err) {
49
+ console.error(`[GroupChat] Failed to connect agent ${a.profile} to room ${roomId}: ${err.message}`);
50
+ }
51
+ }
52
+ const room = storage.getRoom(roomId);
53
+ ctx.body = { room, agents: addedAgents };
59
54
  });
60
- exports.groupChatRoutes.get('/api/hermes/group-chat/rooms/:roomId', async (ctx) => {
61
- const { roomId } = ctx.params;
62
- const room = roomsDb.getRoom(roomId);
63
- if (!room) {
64
- ctx.status = 404;
65
- ctx.body = { error: 'Room not found' };
55
+ // List rooms
56
+ exports.groupChatRoutes.get('/api/hermes/group-chat/rooms', async (ctx) => {
57
+ if (!chatServer) {
58
+ ctx.status = 503;
59
+ ctx.body = { error: 'Group chat not initialized' };
66
60
  return;
67
61
  }
68
- const agents = roomsDb.getRoomAgents(roomId);
69
- ctx.body = { room, agents };
62
+ const rooms = chatServer.getStorage().getAllRooms();
63
+ ctx.body = { rooms };
70
64
  });
71
- exports.groupChatRoutes.put('/api/hermes/group-chat/rooms/:roomId', async (ctx) => {
72
- const { roomId } = ctx.params;
73
- const { name, settings } = ctx.request.body;
74
- const updated = roomsDb.updateRoom(roomId, { name, settings });
75
- if (!updated) {
65
+ // Get room by invite code
66
+ exports.groupChatRoutes.get('/api/hermes/group-chat/rooms/join/:code', async (ctx) => {
67
+ if (!chatServer) {
68
+ ctx.status = 503;
69
+ ctx.body = { error: 'Group chat not initialized' };
70
+ return;
71
+ }
72
+ const room = chatServer.getStorage().getRoomByInviteCode(ctx.params.code);
73
+ if (!room) {
76
74
  ctx.status = 404;
77
75
  ctx.body = { error: 'Room not found' };
78
76
  return;
79
77
  }
80
- ctx.body = { success: true };
78
+ ctx.body = { room };
81
79
  });
82
- exports.groupChatRoutes.delete('/api/hermes/group-chat/rooms/:roomId', async (ctx) => {
83
- const { roomId } = ctx.params;
84
- roomsDb.deleteRoom(roomId);
80
+ // Update room invite code
81
+ exports.groupChatRoutes.put('/api/hermes/group-chat/rooms/:roomId/invite-code', async (ctx) => {
82
+ if (!chatServer) {
83
+ ctx.status = 503;
84
+ ctx.body = { error: 'Group chat not initialized' };
85
+ return;
86
+ }
87
+ const { inviteCode } = ctx.request.body;
88
+ if (!inviteCode) {
89
+ ctx.status = 400;
90
+ ctx.body = { error: 'inviteCode is required' };
91
+ return;
92
+ }
93
+ chatServer.getStorage().updateRoomInviteCode(ctx.params.roomId, inviteCode);
85
94
  ctx.body = { success: true };
86
95
  });
87
- // ---------------------------------------------------------------------------
88
- // Agents
89
- // ---------------------------------------------------------------------------
90
- exports.groupChatRoutes.get('/api/hermes/group-chat/rooms/:roomId/agents', async (ctx) => {
91
- const { roomId } = ctx.params;
92
- const agents = roomsDb.getRoomAgents(roomId);
93
- ctx.body = { agents };
94
- });
96
+ // Add agent to room
95
97
  exports.groupChatRoutes.post('/api/hermes/group-chat/rooms/:roomId/agents', async (ctx) => {
96
- const { roomId } = ctx.params;
97
- const { agent_name, profile, role_prompt } = ctx.request.body;
98
- if (!agent_name?.trim() || !profile?.trim()) {
99
- ctx.status = 400;
100
- ctx.body = { error: 'agent_name and profile are required' };
98
+ if (!chatServer) {
99
+ ctx.status = 503;
100
+ ctx.body = { error: 'Group chat not initialized' };
101
101
  return;
102
102
  }
103
- // Validate agent_name only contains word characters
104
- if (!/^\w+$/.test(agent_name.trim())) {
103
+ const { profile, name, description, invited } = ctx.request.body;
104
+ if (!profile) {
105
105
  ctx.status = 400;
106
- ctx.body = { error: 'agent_name must only contain letters, numbers, and underscores' };
106
+ ctx.body = { error: 'profile is required' };
107
107
  return;
108
108
  }
109
- const agent = roomsDb.addRoomAgent(roomId, {
110
- agent_name: agent_name.trim(),
111
- profile: profile.trim(),
112
- role_prompt,
113
- });
114
- if (!agent) {
115
- ctx.status = 409;
116
- ctx.body = { error: 'Agent already exists in this room' };
117
- return;
109
+ const agentId = generateId();
110
+ const agent = chatServer.getStorage().addRoomAgent(ctx.params.roomId, agentId, profile, name || profile, description || '', invited ? 1 : 0);
111
+ // Auto-connect agent via Socket.IO
112
+ try {
113
+ const client = await chatServer.agentClients.createAgent({
114
+ profile: agent.profile,
115
+ name: agent.name,
116
+ description: agent.description,
117
+ invited: agent.invited,
118
+ });
119
+ await chatServer.agentClients.addAgentToRoom(ctx.params.roomId, client);
120
+ }
121
+ catch (err) {
122
+ console.error(`[GroupChat] Failed to connect agent ${profile} to room ${ctx.params.roomId}: ${err.message}`);
118
123
  }
119
124
  ctx.body = { agent };
120
125
  });
121
- exports.groupChatRoutes.delete('/api/hermes/group-chat/rooms/:roomId/agents/:agentName', async (ctx) => {
122
- const { roomId, agentName } = ctx.params;
123
- roomsDb.removeRoomAgent(roomId, agentName);
124
- ctx.body = { success: true };
126
+ // List agents in room
127
+ exports.groupChatRoutes.get('/api/hermes/group-chat/rooms/:roomId/agents', async (ctx) => {
128
+ if (!chatServer) {
129
+ ctx.status = 503;
130
+ ctx.body = { error: 'Group chat not initialized' };
131
+ return;
132
+ }
133
+ const agents = chatServer.getStorage().getRoomAgents(ctx.params.roomId);
134
+ ctx.body = { agents };
125
135
  });
126
- // ---------------------------------------------------------------------------
127
- // Messages
128
- // ---------------------------------------------------------------------------
129
- exports.groupChatRoutes.get('/api/hermes/group-chat/rooms/:roomId/messages', async (ctx) => {
130
- const { roomId } = ctx.params;
131
- const limit = parseInt(ctx.query.limit) || 100;
132
- const offset = parseInt(ctx.query.offset) || 0;
133
- const messages = roomsDb.getRoomMessages(roomId, limit, offset);
134
- ctx.body = { messages };
136
+ // Remove agent from room
137
+ exports.groupChatRoutes.delete('/api/hermes/group-chat/rooms/:roomId/agents/:agentId', async (ctx) => {
138
+ if (!chatServer) {
139
+ ctx.status = 503;
140
+ ctx.body = { error: 'Group chat not initialized' };
141
+ return;
142
+ }
143
+ chatServer.getStorage().removeRoomAgent(ctx.params.agentId);
144
+ chatServer.agentClients.removeAgentFromRoom(ctx.params.roomId, ctx.params.agentId);
145
+ ctx.body = { success: true };
135
146
  });
@@ -0,0 +1,2 @@
1
+ import Router from '@koa/router';
2
+ export declare const updateRoutes: Router<import("koa").DefaultState, import("koa").DefaultContext>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.updateRoutes = void 0;
40
+ const router_1 = __importDefault(require("@koa/router"));
41
+ exports.updateRoutes = new router_1.default();
42
+ exports.updateRoutes.post('/api/hermes/update', async (ctx) => {
43
+ const isWin = process.platform === 'win32';
44
+ const cmd = isWin
45
+ ? 'cmd /c npm install -g hermes-web-ui@latest'
46
+ : 'npm install -g hermes-web-ui@latest';
47
+ try {
48
+ const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
49
+ const output = execSync(cmd, {
50
+ encoding: 'utf-8',
51
+ timeout: 120000,
52
+ stdio: ['pipe', 'pipe', 'pipe'],
53
+ });
54
+ ctx.body = { success: true, message: output.trim() };
55
+ setTimeout(() => {
56
+ const { spawn } = require('child_process');
57
+ spawn(isWin ? 'cmd' : 'sh', isWin ? ['/c', 'hermes-web-ui restart'] : ['-c', 'hermes-web-ui restart'], {
58
+ detached: true,
59
+ stdio: 'ignore',
60
+ windowsHide: true,
61
+ }).unref();
62
+ process.exit(0);
63
+ }, 2000);
64
+ }
65
+ catch (err) {
66
+ ctx.status = 500;
67
+ ctx.body = { success: false, message: err.stderr || err.message };
68
+ }
69
+ });
@@ -46,7 +46,7 @@ async function authMiddleware(token) {
46
46
  return;
47
47
  }
48
48
  // Skip non-API paths (static files, health check, SPA)
49
- const path = ctx.path;
49
+ const path = ctx.path.toLowerCase();
50
50
  if (path === '/health' ||
51
51
  (!path.startsWith('/api') && !path.startsWith('/v1') && path !== '/webhook')) {
52
52
  await next();
@@ -0,0 +1,2 @@
1
+ export declare function getGatewayManagerInstance(): any;
2
+ export declare function initGatewayManager(): Promise<void>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getGatewayManagerInstance = getGatewayManagerInstance;
37
+ exports.initGatewayManager = initGatewayManager;
38
+ let gatewayManager = null;
39
+ function getGatewayManagerInstance() {
40
+ return gatewayManager;
41
+ }
42
+ async function initGatewayManager() {
43
+ const { GatewayManager } = await Promise.resolve().then(() => __importStar(require('./hermes/gateway-manager')));
44
+ const { getActiveProfileName } = await Promise.resolve().then(() => __importStar(require('./hermes/hermes-profile')));
45
+ const { setGatewayManager } = await Promise.resolve().then(() => __importStar(require('../routes/hermes/gateways')));
46
+ const activeProfile = getActiveProfileName();
47
+ gatewayManager = new GatewayManager(activeProfile);
48
+ setGatewayManager(gatewayManager);
49
+ await gatewayManager.detectAllOnStartup();
50
+ await gatewayManager.startAll();
51
+ }
@@ -0,0 +1,133 @@
1
+ import type { GatewayManager } from '../gateway-manager';
2
+ interface AgentConfig {
3
+ profile: string;
4
+ name: string;
5
+ description: string;
6
+ invited: number;
7
+ }
8
+ interface MessageData {
9
+ id: string;
10
+ roomId: string;
11
+ senderId: string;
12
+ senderName: string;
13
+ content: string;
14
+ timestamp: number;
15
+ }
16
+ interface MemberData {
17
+ id: string;
18
+ name: string;
19
+ joinedAt: number;
20
+ }
21
+ interface JoinResult {
22
+ roomId: string;
23
+ roomName: string;
24
+ members: MemberData[];
25
+ messages: MessageData[];
26
+ rooms: string[];
27
+ }
28
+ export interface AgentEventHandler {
29
+ onMessage?: (data: {
30
+ roomId: string;
31
+ msg: MessageData;
32
+ }) => void;
33
+ onTyping?: (data: {
34
+ roomId: string;
35
+ userId: string;
36
+ userName: string;
37
+ }) => void;
38
+ onStopTyping?: (data: {
39
+ roomId: string;
40
+ userId: string;
41
+ userName: string;
42
+ }) => void;
43
+ onMemberJoined?: (data: {
44
+ roomId: string;
45
+ memberId: string;
46
+ memberName: string;
47
+ members: MemberData[];
48
+ }) => void;
49
+ onMemberLeft?: (data: {
50
+ roomId: string;
51
+ memberId: string;
52
+ memberName: string;
53
+ members: MemberData[];
54
+ }) => void;
55
+ }
56
+ declare class AgentClient {
57
+ readonly agentId: string;
58
+ readonly profile: string;
59
+ readonly name: string;
60
+ private socket;
61
+ private joinedRooms;
62
+ private handlers;
63
+ private port;
64
+ private _reconnecting;
65
+ private gatewayManager;
66
+ constructor(config: AgentConfig, handlers?: AgentEventHandler);
67
+ get connected(): boolean;
68
+ get id(): string | undefined;
69
+ setGatewayManager(manager: GatewayManager): void;
70
+ connect(port?: number): Promise<void>;
71
+ disconnect(): void;
72
+ joinRoom(roomId: string): Promise<JoinResult>;
73
+ sendMessage(roomId: string, content: string): Promise<string>;
74
+ startTyping(roomId: string): void;
75
+ stopTyping(roomId: string): void;
76
+ getJoinedRooms(): string[];
77
+ private deleteSession;
78
+ private ensureConnected;
79
+ /**
80
+ * Forward a user message to Hermes gateway and stream the reply back to the room.
81
+ */
82
+ private handleUserMessage;
83
+ private bindEvents;
84
+ }
85
+ export declare class AgentClients {
86
+ private rooms;
87
+ /**
88
+ * Create an agent client and connect it to the server.
89
+ * The agent will NOT auto-join any room — call addAgentToRoom separately.
90
+ */
91
+ createAgent(config: AgentConfig, handlers?: AgentEventHandler, port?: number): Promise<AgentClient>;
92
+ /**
93
+ * Connect an agent to a room.
94
+ */
95
+ addAgentToRoom(roomId: string, client: AgentClient): Promise<JoinResult>;
96
+ /**
97
+ * Remove an agent from a room and disconnect it.
98
+ */
99
+ removeAgentFromRoom(roomId: string, agentId: string): void;
100
+ /**
101
+ * Get all agents in a room.
102
+ */
103
+ getAgents(roomId: string): AgentClient[];
104
+ /**
105
+ * Get a specific agent in a room.
106
+ */
107
+ getAgent(roomId: string, agentId: string): AgentClient | undefined;
108
+ /**
109
+ * Get all room IDs that have agents.
110
+ */
111
+ getRoomIds(): string[];
112
+ /**
113
+ * Send a message from a specific agent in a room.
114
+ */
115
+ sendMessage(roomId: string, agentId: string, content: string): Promise<string>;
116
+ /**
117
+ * Broadcast a message from all agents in a room.
118
+ */
119
+ broadcastFromRoom(roomId: string, content: string): Promise<string[]>;
120
+ /**
121
+ * Disconnect all agents in a room.
122
+ */
123
+ disconnectRoom(roomId: string): void;
124
+ /**
125
+ * Disconnect all agents in all rooms.
126
+ */
127
+ disconnectAll(): void;
128
+ /**
129
+ * Set gateway manager for all existing and future agents.
130
+ */
131
+ setGatewayManager(manager: GatewayManager): void;
132
+ }
133
+ export {};