@pixelbyte-software/pixcode 1.52.4 → 1.53.1

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 (98) hide show
  1. package/README.md +9 -10
  2. package/README.tr.md +1 -1
  3. package/dist/api-automation.html +1 -1
  4. package/dist/assets/index-BO0lz8ZD.js +816 -0
  5. package/dist/assets/index-DnjqWG8B.css +32 -0
  6. package/dist/docs.html +10 -10
  7. package/dist/features.html +3 -3
  8. package/dist/index.html +2 -2
  9. package/dist/landing.html +16 -16
  10. package/dist/llms-full.txt +4 -4
  11. package/dist/llms.txt +3 -3
  12. package/dist/openapi.yaml +6 -6
  13. package/dist-server/server/index.js +8 -125
  14. package/dist-server/server/index.js.map +1 -1
  15. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js +1 -1
  16. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js.map +1 -1
  17. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js +1 -1
  18. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js.map +1 -1
  19. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js +1 -1
  20. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js.map +1 -1
  21. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js +1 -1
  22. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js.map +1 -1
  23. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js +1 -1
  24. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js.map +1 -1
  25. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js +1 -1
  26. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js.map +1 -1
  27. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js +1 -1
  28. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js.map +1 -1
  29. package/dist-server/server/modules/orchestration/a2a/agent-card.js +4 -4
  30. package/dist-server/server/modules/orchestration/a2a/agent-card.js.map +1 -1
  31. package/dist-server/server/modules/orchestration/a2a/routes.js +2 -5
  32. package/dist-server/server/modules/orchestration/a2a/routes.js.map +1 -1
  33. package/dist-server/server/modules/orchestration/a2a/task-dispatcher.js +295 -0
  34. package/dist-server/server/modules/orchestration/a2a/task-dispatcher.js.map +1 -0
  35. package/dist-server/server/modules/orchestration/index.js +0 -2
  36. package/dist-server/server/modules/orchestration/index.js.map +1 -1
  37. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js +2 -2
  38. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js.map +1 -1
  39. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js +12 -0
  40. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js.map +1 -1
  41. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js +19 -26
  42. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js.map +1 -1
  43. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js +47 -58
  44. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js.map +1 -1
  45. package/dist-server/server/modules/orchestration/workflows/workflow-trace.js +2 -2
  46. package/dist-server/server/modules/orchestration/workflows/workflow-trace.js.map +1 -1
  47. package/dist-server/server/routes/git.js +79 -21
  48. package/dist-server/server/routes/git.js.map +1 -1
  49. package/dist-server/server/services/public-api-manifest.js +0 -9
  50. package/dist-server/server/services/public-api-manifest.js.map +1 -1
  51. package/package.json +1 -1
  52. package/server/index.js +7 -134
  53. package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +1 -1
  54. package/server/modules/orchestration/a2a/adapters/codex.adapter.ts +1 -1
  55. package/server/modules/orchestration/a2a/adapters/cursor.adapter.ts +1 -1
  56. package/server/modules/orchestration/a2a/adapters/gemini.adapter.ts +1 -1
  57. package/server/modules/orchestration/a2a/adapters/json-event.adapter.ts +1 -1
  58. package/server/modules/orchestration/a2a/adapters/opencode.adapter.ts +1 -1
  59. package/server/modules/orchestration/a2a/adapters/qwen.adapter.ts +1 -1
  60. package/server/modules/orchestration/a2a/agent-card.ts +4 -4
  61. package/server/modules/orchestration/a2a/routes.ts +2 -6
  62. package/server/modules/orchestration/a2a/task-dispatcher.ts +345 -0
  63. package/server/modules/orchestration/index.ts +0 -2
  64. package/server/modules/orchestration/tasks/orchestration-task-store.ts +2 -2
  65. package/server/modules/orchestration/tasks/orchestration-task.routes.ts +17 -0
  66. package/server/modules/orchestration/tasks/orchestration-task.service.ts +19 -27
  67. package/server/modules/orchestration/tasks/orchestration-task.types.ts +2 -2
  68. package/server/modules/orchestration/tasks/task-run-graph.ts +1 -1
  69. package/server/modules/orchestration/workflows/workflow-runner.ts +52 -60
  70. package/server/modules/orchestration/workflows/workflow-trace.ts +2 -2
  71. package/server/modules/orchestration/workflows/workflow.types.ts +1 -1
  72. package/server/routes/git.js +89 -28
  73. package/server/services/public-api-manifest.js +0 -9
  74. package/dist/assets/index-CapxXSc7.js +0 -816
  75. package/dist/assets/index-DkT6-Pja.css +0 -32
  76. package/dist/hermes-agent.png +0 -0
  77. package/dist-server/server/modules/orchestration/hermes/hermes.routes.js +0 -577
  78. package/dist-server/server/modules/orchestration/hermes/hermes.routes.js.map +0 -1
  79. package/dist-server/server/services/hermes-gateway.js +0 -1467
  80. package/dist-server/server/services/hermes-gateway.js.map +0 -1
  81. package/dist-server/server/services/hermes-install-jobs.js +0 -676
  82. package/dist-server/server/services/hermes-install-jobs.js.map +0 -1
  83. package/scripts/hermes/configure-pixcode-mcp.mjs +0 -165
  84. package/scripts/hermes/pixcode-mcp-server.mjs +0 -1009
  85. package/scripts/smoke/hermes-api-install.mjs +0 -56
  86. package/scripts/smoke/hermes-gateway-persistence.mjs +0 -104
  87. package/scripts/smoke/hermes-mcp-pixcode-roundtrip.mjs +0 -426
  88. package/scripts/smoke/hermes-rest-chat-api.mjs +0 -162
  89. package/scripts/smoke/hermes-rest-chat-live.mjs +0 -45
  90. package/scripts/smoke/hermes-rest-codex-launch.mjs +0 -209
  91. package/scripts/smoke/hermes-rest-gateway.mjs +0 -79
  92. package/scripts/smoke/hermes-rest-live.mjs +0 -42
  93. package/scripts/smoke/hermes-roundtrip.mjs +0 -167
  94. package/scripts/smoke/hermes-settings-commands.mjs +0 -349
  95. package/scripts/smoke/hermes-smoke-launcher-guard.mjs +0 -34
  96. package/server/modules/orchestration/hermes/hermes.routes.ts +0 -642
  97. package/server/services/hermes-gateway.js +0 -1562
  98. package/server/services/hermes-install-jobs.js +0 -729
@@ -1,577 +0,0 @@
1
- import os from 'node:os';
2
- import { EventEmitter } from 'node:events';
3
- import express from 'express';
4
- import { adapterRegistry } from '../../../modules/orchestration/a2a/adapter-registry.js';
5
- import { a2aTaskStore as hermesTaskStore } from '../../../modules/orchestration/a2a/task-store.js';
6
- import { cancelHermesInstallJob, createHermesInstallJob, getHermesInstallJob, readHermesInstallStatus, snapshotHermesInstallDonePayload, } from '../../../services/hermes-install-jobs.js';
7
- import { ensureHermesGateway, getHermesGatewayStatus, probeHermesGateway, readHermesControlPlane, readHermesDiagnostics, repairHermesControlPlane, requestHermesGateway, runHermesGatewayPrompt, stopHermesGateway, } from '../../../services/hermes-gateway.js';
8
- const HERMES_TERMINAL_LAUNCH_LIMIT = 100;
9
- const HERMES_TERMINAL_LAUNCH_PROVIDERS = new Set(['claude', 'codex', 'cursor', 'gemini', 'qwen', 'opencode']);
10
- const HERMES_TERMINAL_LAUNCH_STREAM_HEARTBEAT_MS = 25000;
11
- let nextHermesTerminalLaunchId = 1;
12
- const hermesTerminalLaunches = [];
13
- const hermesTerminalLaunchEmitter = new EventEmitter();
14
- hermesTerminalLaunchEmitter.setMaxListeners(200);
15
- function writeSse(res, event, payload) {
16
- res.write(`event: ${event}\n`);
17
- res.write(`data: ${JSON.stringify(payload)}\n\n`);
18
- }
19
- function readUserId(req) {
20
- return req.user?.id ?? req.user?.userId ?? null;
21
- }
22
- function resolveHermesMcpBaseUrl() {
23
- const configured = process.env.PIXCODE_INTERNAL_BASE_URL || process.env.PIXCODE_HERMES_BASE_URL;
24
- if (configured)
25
- return configured.replace(/\/$/, '');
26
- return `http://127.0.0.1:${process.env.SERVER_PORT ?? process.env.PORT ?? '3001'}`;
27
- }
28
- function readAfterId(req) {
29
- const after = Number.parseInt(typeof req.query.after === 'string' ? req.query.after : '0', 10);
30
- return Number.isFinite(after) ? after : 0;
31
- }
32
- function rememberHermesTerminalLaunch(event) {
33
- hermesTerminalLaunches.push(event);
34
- if (hermesTerminalLaunches.length > HERMES_TERMINAL_LAUNCH_LIMIT) {
35
- hermesTerminalLaunches.splice(0, hermesTerminalLaunches.length - HERMES_TERMINAL_LAUNCH_LIMIT);
36
- }
37
- hermesTerminalLaunchEmitter.emit('terminal-launch', event);
38
- }
39
- function readTrimmedString(value) {
40
- return typeof value === 'string' && value.trim() ? value.trim() : null;
41
- }
42
- function readBoolean(value) {
43
- return value === true || value === 'true' || value === '1';
44
- }
45
- function isLegacyPromptLikelyStartupInput(prompt) {
46
- if (!prompt || prompt.length > 160 || prompt.includes('\n'))
47
- return false;
48
- if (/^[/:!@]/u.test(prompt))
49
- return true;
50
- if (prompt.includes(':'))
51
- return false;
52
- if (/\b(user|request|reason|audit|task|kullanıcı|kullanicinin|istek|isteği|gorev|görev|terminal|codex|claude|qwen|gemini|cursor|opencode|open|aç|ac|başlat|baslat|send|gönder|gonder)\b/iu.test(prompt)) {
53
- return false;
54
- }
55
- return prompt.length <= 80;
56
- }
57
- export function createHermesRouter(options = {}) {
58
- const router = express.Router();
59
- router.get('/status', (_req, res) => {
60
- res.json({
61
- id: 'hermes',
62
- name: 'Hermes Agent',
63
- product: 'Pixcode',
64
- runtime: {
65
- mode: process.env.PIXCODE_MANAGED_PLATFORM === '1' ? 'managed' : 'local',
66
- host: os.hostname(),
67
- node: process.version,
68
- pid: process.pid,
69
- },
70
- capabilities: [
71
- 'project-aware CLI orchestration',
72
- 'background checks and tests',
73
- 'workspace-scoped terminal operations',
74
- 'run history and artifact review',
75
- ],
76
- });
77
- });
78
- router.get('/context', (req, res) => {
79
- const project = typeof req.query.project === 'string' ? req.query.project : null;
80
- const cwd = typeof req.query.cwd === 'string' ? req.query.cwd : process.cwd();
81
- res.json({
82
- agent: 'Hermes Agent',
83
- product: 'Pixcode',
84
- project,
85
- cwd,
86
- local: true,
87
- message: project
88
- ? `Hermes is operating inside Pixcode for ${project}.`
89
- : 'Hermes is operating inside Pixcode.',
90
- });
91
- });
92
- router.get('/install-status', (_req, res) => {
93
- res.json(readHermesInstallStatus());
94
- });
95
- router.get('/gateway/status', (req, res) => {
96
- const projectPath = typeof req.query.projectPath === 'string' ? req.query.projectPath : null;
97
- res.json(getHermesGatewayStatus(projectPath));
98
- });
99
- router.post('/gateway/start', async (req, res) => {
100
- const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
101
- if (!apiKey) {
102
- res.status(500).json({
103
- error: {
104
- code: 'HERMES_API_KEY_UNAVAILABLE',
105
- message: 'Pixcode could not create a Hermes MCP API key for this user.',
106
- },
107
- });
108
- return;
109
- }
110
- const body = (req.body ?? {});
111
- try {
112
- const gateway = await ensureHermesGateway({
113
- appRoot: options.appRoot ?? process.cwd(),
114
- pixcodeApiKey: apiKey,
115
- pixcodeBaseUrl: resolveHermesMcpBaseUrl(),
116
- projectPath: typeof body.projectPath === 'string' ? body.projectPath : undefined,
117
- });
118
- res.status(202).json(gateway);
119
- }
120
- catch (error) {
121
- res.status(500).json({
122
- error: {
123
- code: 'HERMES_GATEWAY_START_FAILED',
124
- message: error instanceof Error ? error.message : String(error),
125
- },
126
- });
127
- }
128
- });
129
- router.post('/gateway/probe', async (req, res) => {
130
- const body = (req.body ?? {});
131
- const projectPath = typeof body.projectPath === 'string' ? body.projectPath : null;
132
- const input = typeof body.input === 'string' ? body.input : undefined;
133
- const shouldStart = body.startIfNeeded === true;
134
- try {
135
- if (shouldStart) {
136
- const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
137
- if (!apiKey) {
138
- res.status(500).json({
139
- error: {
140
- code: 'HERMES_API_KEY_UNAVAILABLE',
141
- message: 'Pixcode could not create a Hermes MCP API key for this user.',
142
- },
143
- });
144
- return;
145
- }
146
- await ensureHermesGateway({
147
- appRoot: options.appRoot ?? process.cwd(),
148
- pixcodeApiKey: apiKey,
149
- pixcodeBaseUrl: resolveHermesMcpBaseUrl(),
150
- projectPath: projectPath ?? undefined,
151
- });
152
- }
153
- const probe = await probeHermesGateway(projectPath, { input });
154
- res.status(probe.ok ? 200 : 503).json(probe);
155
- }
156
- catch (error) {
157
- res.status(500).json({
158
- error: {
159
- code: 'HERMES_GATEWAY_PROBE_FAILED',
160
- message: error instanceof Error ? error.message : String(error),
161
- },
162
- });
163
- }
164
- });
165
- router.post('/gateway/chat', async (req, res) => {
166
- const body = (req.body ?? {});
167
- const projectPath = typeof body.projectPath === 'string' && body.projectPath.trim()
168
- ? body.projectPath.trim()
169
- : undefined;
170
- const input = typeof body.input === 'string' ? body.input.trim() : '';
171
- const sessionId = typeof body.sessionId === 'string' && body.sessionId.trim()
172
- ? body.sessionId.trim()
173
- : undefined;
174
- if (!input) {
175
- res.status(400).json({
176
- error: {
177
- code: 'HERMES_PROMPT_REQUIRED',
178
- message: 'Hermes prompt is required.',
179
- },
180
- });
181
- return;
182
- }
183
- const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
184
- if (!apiKey) {
185
- res.status(500).json({
186
- error: {
187
- code: 'HERMES_API_KEY_UNAVAILABLE',
188
- message: 'Pixcode could not create a Hermes MCP API key for this user.',
189
- },
190
- });
191
- return;
192
- }
193
- try {
194
- const gateway = await ensureHermesGateway({
195
- appRoot: options.appRoot ?? process.cwd(),
196
- pixcodeApiKey: apiKey,
197
- pixcodeBaseUrl: resolveHermesMcpBaseUrl(),
198
- projectPath,
199
- probeExisting: false,
200
- });
201
- const run = await runHermesGatewayPrompt(projectPath, {
202
- input,
203
- sessionId,
204
- });
205
- res.status(run.ok ? 200 : 502).json({
206
- ok: run.ok,
207
- gateway,
208
- run,
209
- message: run.message,
210
- error: run.error ?? null,
211
- });
212
- }
213
- catch (error) {
214
- res.status(500).json({
215
- error: {
216
- code: 'HERMES_GATEWAY_CHAT_FAILED',
217
- message: error instanceof Error ? error.message : String(error),
218
- },
219
- });
220
- }
221
- });
222
- router.post('/gateway/request', async (req, res) => {
223
- const body = (req.body ?? {});
224
- const projectPath = typeof body.projectPath === 'string' && body.projectPath.trim()
225
- ? body.projectPath.trim()
226
- : undefined;
227
- const endpoint = typeof body.endpoint === 'string' ? body.endpoint : body.path;
228
- const method = typeof body.method === 'string' ? body.method : 'GET';
229
- try {
230
- if (body.startIfNeeded === true) {
231
- const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
232
- if (!apiKey) {
233
- res.status(500).json({
234
- error: {
235
- code: 'HERMES_API_KEY_UNAVAILABLE',
236
- message: 'Pixcode could not create a Hermes MCP API key for this user.',
237
- },
238
- });
239
- return;
240
- }
241
- await ensureHermesGateway({
242
- appRoot: options.appRoot ?? process.cwd(),
243
- pixcodeApiKey: apiKey,
244
- pixcodeBaseUrl: resolveHermesMcpBaseUrl(),
245
- projectPath,
246
- });
247
- }
248
- const gatewayResponse = await requestHermesGateway(projectPath, {
249
- endpoint,
250
- method,
251
- body: body.body,
252
- timeoutMs: typeof body.timeoutMs === 'number' ? body.timeoutMs : undefined,
253
- });
254
- res.status(gatewayResponse.ok ? 200 : 502).json(gatewayResponse);
255
- }
256
- catch (error) {
257
- res.status(500).json({
258
- error: {
259
- code: 'HERMES_GATEWAY_REQUEST_FAILED',
260
- message: error instanceof Error ? error.message : String(error),
261
- },
262
- });
263
- }
264
- });
265
- router.get('/diagnostics', async (req, res) => {
266
- const projectPath = typeof req.query.projectPath === 'string' && req.query.projectPath.trim()
267
- ? req.query.projectPath.trim()
268
- : undefined;
269
- try {
270
- const diagnostics = await readHermesDiagnostics({
271
- appRoot: options.appRoot ?? process.cwd(),
272
- projectPath,
273
- });
274
- res.status(diagnostics.ok ? 200 : 503).json(diagnostics);
275
- }
276
- catch (error) {
277
- res.status(500).json({
278
- error: {
279
- code: 'HERMES_DIAGNOSTICS_FAILED',
280
- message: error instanceof Error ? error.message : String(error),
281
- },
282
- });
283
- }
284
- });
285
- router.get('/control-plane', async (req, res) => {
286
- const projectPath = typeof req.query.projectPath === 'string' && req.query.projectPath.trim()
287
- ? req.query.projectPath.trim()
288
- : undefined;
289
- try {
290
- const controlPlane = await readHermesControlPlane({
291
- appRoot: options.appRoot ?? process.cwd(),
292
- projectPath,
293
- });
294
- res.status(controlPlane.ok ? 200 : 503).json(controlPlane);
295
- }
296
- catch (error) {
297
- res.status(500).json({
298
- error: {
299
- code: 'HERMES_CONTROL_PLANE_FAILED',
300
- message: error instanceof Error ? error.message : String(error),
301
- },
302
- });
303
- }
304
- });
305
- router.post('/control-plane/repair', async (req, res) => {
306
- const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
307
- if (!apiKey) {
308
- res.status(500).json({
309
- error: {
310
- code: 'HERMES_API_KEY_UNAVAILABLE',
311
- message: 'Pixcode could not create a Hermes MCP API key for this user.',
312
- },
313
- });
314
- return;
315
- }
316
- const body = (req.body ?? {});
317
- const projectPath = typeof body.projectPath === 'string' && body.projectPath.trim()
318
- ? body.projectPath.trim()
319
- : undefined;
320
- try {
321
- const repaired = await repairHermesControlPlane({
322
- appRoot: options.appRoot ?? process.cwd(),
323
- pixcodeApiKey: apiKey,
324
- pixcodeBaseUrl: resolveHermesMcpBaseUrl(),
325
- projectPath,
326
- forceRestart: readBoolean(body.forceRestart),
327
- });
328
- res.status(repaired.ok ? 200 : 202).json(repaired);
329
- }
330
- catch (error) {
331
- res.status(500).json({
332
- error: {
333
- code: 'HERMES_CONTROL_PLANE_REPAIR_FAILED',
334
- message: error instanceof Error ? error.message : String(error),
335
- },
336
- });
337
- }
338
- });
339
- router.post('/gateway/stop', (req, res) => {
340
- const body = (req.body ?? {});
341
- const projectPath = typeof body.projectPath === 'string' ? body.projectPath : null;
342
- res.json(stopHermesGateway(projectPath));
343
- });
344
- router.post('/install', (req, res) => {
345
- const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
346
- if (!apiKey) {
347
- res.status(500).json({
348
- error: {
349
- code: 'HERMES_API_KEY_UNAVAILABLE',
350
- message: 'Pixcode could not create a Hermes MCP API key for this user.',
351
- },
352
- });
353
- return;
354
- }
355
- const body = (req.body ?? {});
356
- const job = createHermesInstallJob({
357
- appRoot: options.appRoot ?? process.cwd(),
358
- force: Boolean(body.force),
359
- pixcodeApiKey: apiKey,
360
- pixcodeBaseUrl: resolveHermesMcpBaseUrl(),
361
- skipBrowser: body.skipBrowser !== false,
362
- });
363
- res.status(202).json({
364
- jobId: job.id,
365
- provider: 'hermes',
366
- status: job.status,
367
- startedAt: job.startedAt,
368
- });
369
- });
370
- router.get('/install/:jobId/stream', (req, res) => {
371
- const job = getHermesInstallJob(req.params.jobId);
372
- if (!job) {
373
- res.status(404).json({
374
- error: {
375
- code: 'HERMES_INSTALL_JOB_NOT_FOUND',
376
- message: 'Hermes install job not found or already expired.',
377
- },
378
- });
379
- return;
380
- }
381
- res.setHeader('Content-Type', 'text/event-stream');
382
- res.setHeader('Cache-Control', 'no-cache, no-transform');
383
- res.setHeader('Connection', 'keep-alive');
384
- res.setHeader('X-Accel-Buffering', 'no');
385
- if (typeof res.flushHeaders === 'function')
386
- res.flushHeaders();
387
- try {
388
- res.socket?.setNoDelay?.(true);
389
- }
390
- catch { /* noop */ }
391
- let closed = false;
392
- const safeWrite = (event, payload) => {
393
- if (closed)
394
- return;
395
- try {
396
- writeSse(res, event, payload);
397
- }
398
- catch { /* socket gone */ }
399
- };
400
- try {
401
- res.write(': start\n\n');
402
- }
403
- catch { /* noop */ }
404
- const heartbeat = setInterval(() => {
405
- if (closed)
406
- return;
407
- try {
408
- res.write(': ping\n\n');
409
- }
410
- catch { /* noop */ }
411
- }, 5000);
412
- for (const entry of job.logs) {
413
- safeWrite('log', { stream: entry.stream, chunk: entry.chunk });
414
- }
415
- const onLog = (entry) => {
416
- safeWrite('log', { stream: entry.stream, chunk: entry.chunk });
417
- };
418
- const onDone = (payload) => {
419
- safeWrite('done', payload);
420
- cleanup();
421
- try {
422
- res.end();
423
- }
424
- catch { /* noop */ }
425
- };
426
- function cleanup() {
427
- if (closed)
428
- return;
429
- closed = true;
430
- clearInterval(heartbeat);
431
- job.emitter.off('log', onLog);
432
- job.emitter.off('done', onDone);
433
- }
434
- if (job.status !== 'running') {
435
- safeWrite('done', snapshotHermesInstallDonePayload(job));
436
- cleanup();
437
- try {
438
- res.end();
439
- }
440
- catch { /* noop */ }
441
- return;
442
- }
443
- job.emitter.on('log', onLog);
444
- job.emitter.once('done', onDone);
445
- req.on('close', cleanup);
446
- });
447
- router.delete('/install/:jobId', (req, res) => {
448
- const job = getHermesInstallJob(req.params.jobId);
449
- if (!job) {
450
- res.status(404).json({
451
- error: {
452
- code: 'HERMES_INSTALL_JOB_NOT_FOUND',
453
- message: 'Hermes install job not found.',
454
- },
455
- });
456
- return;
457
- }
458
- res.json({ cancelled: cancelHermesInstallJob(req.params.jobId) });
459
- });
460
- router.get('/agents', (_req, res) => {
461
- res.json({
462
- agent: 'hermes',
463
- agents: adapterRegistry.agentCards().map((agent) => ({
464
- ...agent,
465
- coordinator: 'hermes',
466
- })),
467
- });
468
- });
469
- router.get('/terminal-launches', (req, res) => {
470
- const afterId = readAfterId(req);
471
- res.json({
472
- events: hermesTerminalLaunches.filter((event) => event.id > afterId),
473
- });
474
- });
475
- router.get('/terminal-launches/stream', (req, res) => {
476
- const afterId = readAfterId(req);
477
- res.setHeader('Content-Type', 'text/event-stream');
478
- res.setHeader('Cache-Control', 'no-cache, no-transform');
479
- res.setHeader('Connection', 'keep-alive');
480
- res.setHeader('X-Accel-Buffering', 'no');
481
- if (typeof res.flushHeaders === 'function')
482
- res.flushHeaders();
483
- try {
484
- res.socket?.setNoDelay?.(true);
485
- }
486
- catch { /* noop */ }
487
- let closed = false;
488
- const safeWrite = (event, payload) => {
489
- if (closed)
490
- return;
491
- try {
492
- writeSse(res, event, payload);
493
- }
494
- catch { /* socket gone */ }
495
- };
496
- try {
497
- res.write(': start\n\n');
498
- }
499
- catch { /* noop */ }
500
- const replayed = hermesTerminalLaunches.filter((event) => event.id > afterId);
501
- for (const event of replayed) {
502
- safeWrite('terminal-launch', event);
503
- }
504
- safeWrite('ready', {
505
- latestId: hermesTerminalLaunches[hermesTerminalLaunches.length - 1]?.id ?? afterId,
506
- replayed: replayed.length,
507
- });
508
- const heartbeat = setInterval(() => {
509
- if (closed)
510
- return;
511
- try {
512
- res.write(': ping\n\n');
513
- }
514
- catch { /* noop */ }
515
- }, HERMES_TERMINAL_LAUNCH_STREAM_HEARTBEAT_MS);
516
- const onTerminalLaunch = (event) => {
517
- safeWrite('terminal-launch', event);
518
- };
519
- hermesTerminalLaunchEmitter.on('terminal-launch', onTerminalLaunch);
520
- const cleanup = () => {
521
- if (closed)
522
- return;
523
- closed = true;
524
- clearInterval(heartbeat);
525
- hermesTerminalLaunchEmitter.off('terminal-launch', onTerminalLaunch);
526
- };
527
- req.on('close', cleanup);
528
- });
529
- router.post('/terminal-launches', (req, res) => {
530
- const body = (req.body ?? {});
531
- const provider = typeof body.provider === 'string' ? body.provider.trim() : '';
532
- if (!HERMES_TERMINAL_LAUNCH_PROVIDERS.has(provider)) {
533
- res.status(400).json({ error: { code: 'INVALID_PROVIDER', message: provider || 'provider is required' } });
534
- return;
535
- }
536
- const projectPath = typeof body.projectPath === 'string' && body.projectPath.trim()
537
- ? body.projectPath.trim()
538
- : null;
539
- const prompt = readTrimmedString(body.prompt ?? body.reason);
540
- const requestedStartupInput = readTrimmedString(body.startupInput ?? body.input);
541
- const startupInput = requestedStartupInput ?? (isLegacyPromptLikelyStartupInput(prompt) ? prompt : null);
542
- const forceNewSession = readBoolean(body.forceNewSession ?? body.newSession ?? body.freshSession);
543
- const bypassPermissions = readBoolean(body.bypassPermissions);
544
- const skipPermissions = readBoolean(body.skipPermissions) || bypassPermissions;
545
- const requestedPermissionMode = readTrimmedString(body.permissionMode);
546
- const permissionMode = requestedPermissionMode ?? (skipPermissions ? 'bypassPermissions' : null);
547
- const event = {
548
- id: nextHermesTerminalLaunchId,
549
- provider,
550
- projectPath,
551
- prompt,
552
- startupInput,
553
- forceNewSession,
554
- permissionMode,
555
- skipPermissions,
556
- bypassPermissions,
557
- source: 'hermes-mcp',
558
- createdAt: new Date().toISOString(),
559
- };
560
- nextHermesTerminalLaunchId += 1;
561
- rememberHermesTerminalLaunch(event);
562
- res.status(201).json({ event });
563
- });
564
- router.get('/tasks/:id', (req, res) => {
565
- const task = hermesTaskStore.get(req.params.id);
566
- if (!task) {
567
- res.status(404).json({ error: { code: 'HERMES_TASK_NOT_FOUND', message: req.params.id } });
568
- return;
569
- }
570
- res.json({
571
- ...task,
572
- hermesTaskId: task.id,
573
- });
574
- });
575
- return router;
576
- }
577
- //# sourceMappingURL=hermes.routes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hermes.routes.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/hermes/hermes.routes.ts"],"names":[],"mappings":"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"}