@pixelbyte-software/pixcode 1.49.1 → 1.49.3

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.
@@ -1,57 +1,20 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { existsSync } from 'node:fs';
3
1
  import os from 'node:os';
4
- import path from 'node:path';
5
2
  import express from 'express';
6
3
  import { adapterRegistry } from '../../../modules/orchestration/a2a/adapter-registry.js';
7
4
  import { a2aTaskStore as hermesTaskStore } from '../../../modules/orchestration/a2a/task-store.js';
5
+ import { cancelHermesInstallJob, createHermesInstallJob, getHermesInstallJob, readHermesInstallStatus, snapshotHermesInstallDonePayload, } from '../../../services/hermes-install-jobs.js';
8
6
  const HERMES_TERMINAL_LAUNCH_LIMIT = 100;
9
7
  const HERMES_TERMINAL_LAUNCH_PROVIDERS = new Set(['claude', 'codex', 'cursor', 'gemini', 'qwen', 'opencode']);
10
8
  let nextHermesTerminalLaunchId = 1;
11
9
  const hermesTerminalLaunches = [];
12
- function hermesCommandCandidates() {
13
- const candidates = [process.env.HERMES_CLI_PATH, 'hermes'].filter((candidate) => (typeof candidate === 'string' && candidate.trim().length > 0));
14
- if (process.platform === 'win32') {
15
- const localAppData = process.env.LOCALAPPDATA;
16
- if (localAppData) {
17
- candidates.push(path.join(localAppData, 'hermes', 'hermes-agent', 'venv', 'Scripts', 'hermes.exe'), path.join(localAppData, 'hermes', 'hermes-agent', '.venv', 'Scripts', 'hermes.exe'), path.join(localAppData, 'hermes', 'hermes-agent', 'hermes.exe'));
18
- }
19
- }
20
- else {
21
- candidates.push(path.join(os.homedir(), '.local', 'bin', 'hermes'), path.join(os.homedir(), '.hermes', 'hermes-agent', 'venv', 'bin', 'hermes'), '/usr/local/bin/hermes');
22
- }
23
- return [...new Set(candidates)];
10
+ function writeSse(res, event, payload) {
11
+ res.write(`event: ${event}\n`);
12
+ res.write(`data: ${JSON.stringify(payload)}\n\n`);
24
13
  }
25
- function readHermesInstallStatus() {
26
- for (const candidate of hermesCommandCandidates()) {
27
- const isBareCommand = candidate === 'hermes';
28
- if (!isBareCommand && !existsSync(candidate)) {
29
- continue;
30
- }
31
- const result = spawnSync(candidate, ['--version'], {
32
- encoding: 'utf8',
33
- stdio: ['ignore', 'pipe', 'pipe'],
34
- timeout: 5000,
35
- shell: false,
36
- });
37
- if (!result.error && result.status === 0) {
38
- const version = `${result.stdout || result.stderr || ''}`.trim() || null;
39
- return {
40
- installed: true,
41
- command: candidate,
42
- version,
43
- error: null,
44
- };
45
- }
46
- }
47
- return {
48
- installed: false,
49
- command: null,
50
- version: null,
51
- error: 'Hermes Agent CLI is not installed or is not on PATH.',
52
- };
14
+ function readUserId(req) {
15
+ return req.user?.id ?? req.user?.userId ?? null;
53
16
  }
54
- export function createHermesRouter() {
17
+ export function createHermesRouter(options = {}) {
55
18
  const router = express.Router();
56
19
  router.get('/status', (_req, res) => {
57
20
  res.json({
@@ -89,6 +52,122 @@ export function createHermesRouter() {
89
52
  router.get('/install-status', (_req, res) => {
90
53
  res.json(readHermesInstallStatus());
91
54
  });
55
+ router.post('/install', (req, res) => {
56
+ const apiKey = options.createHermesApiKey?.(readUserId(req)) ?? null;
57
+ if (!apiKey) {
58
+ res.status(500).json({
59
+ error: {
60
+ code: 'HERMES_API_KEY_UNAVAILABLE',
61
+ message: 'Pixcode could not create a Hermes MCP API key for this user.',
62
+ },
63
+ });
64
+ return;
65
+ }
66
+ const body = (req.body ?? {});
67
+ const job = createHermesInstallJob({
68
+ appRoot: options.appRoot ?? process.cwd(),
69
+ force: Boolean(body.force),
70
+ pixcodeApiKey: apiKey,
71
+ pixcodeBaseUrl: options.resolvePublicBaseUrl?.(req) ?? `http://127.0.0.1:${process.env.SERVER_PORT ?? process.env.PORT ?? '3001'}`,
72
+ skipBrowser: body.skipBrowser !== false,
73
+ });
74
+ res.status(202).json({
75
+ jobId: job.id,
76
+ provider: 'hermes',
77
+ status: job.status,
78
+ startedAt: job.startedAt,
79
+ });
80
+ });
81
+ router.get('/install/:jobId/stream', (req, res) => {
82
+ const job = getHermesInstallJob(req.params.jobId);
83
+ if (!job) {
84
+ res.status(404).json({
85
+ error: {
86
+ code: 'HERMES_INSTALL_JOB_NOT_FOUND',
87
+ message: 'Hermes install job not found or already expired.',
88
+ },
89
+ });
90
+ return;
91
+ }
92
+ res.setHeader('Content-Type', 'text/event-stream');
93
+ res.setHeader('Cache-Control', 'no-cache, no-transform');
94
+ res.setHeader('Connection', 'keep-alive');
95
+ res.setHeader('X-Accel-Buffering', 'no');
96
+ if (typeof res.flushHeaders === 'function')
97
+ res.flushHeaders();
98
+ try {
99
+ res.socket?.setNoDelay?.(true);
100
+ }
101
+ catch { /* noop */ }
102
+ let closed = false;
103
+ const safeWrite = (event, payload) => {
104
+ if (closed)
105
+ return;
106
+ try {
107
+ writeSse(res, event, payload);
108
+ }
109
+ catch { /* socket gone */ }
110
+ };
111
+ try {
112
+ res.write(': start\n\n');
113
+ }
114
+ catch { /* noop */ }
115
+ const heartbeat = setInterval(() => {
116
+ if (closed)
117
+ return;
118
+ try {
119
+ res.write(': ping\n\n');
120
+ }
121
+ catch { /* noop */ }
122
+ }, 5000);
123
+ for (const entry of job.logs) {
124
+ safeWrite('log', { stream: entry.stream, chunk: entry.chunk });
125
+ }
126
+ const onLog = (entry) => {
127
+ safeWrite('log', { stream: entry.stream, chunk: entry.chunk });
128
+ };
129
+ const onDone = (payload) => {
130
+ safeWrite('done', payload);
131
+ cleanup();
132
+ try {
133
+ res.end();
134
+ }
135
+ catch { /* noop */ }
136
+ };
137
+ function cleanup() {
138
+ if (closed)
139
+ return;
140
+ closed = true;
141
+ clearInterval(heartbeat);
142
+ job.emitter.off('log', onLog);
143
+ job.emitter.off('done', onDone);
144
+ }
145
+ if (job.status !== 'running') {
146
+ safeWrite('done', snapshotHermesInstallDonePayload(job));
147
+ cleanup();
148
+ try {
149
+ res.end();
150
+ }
151
+ catch { /* noop */ }
152
+ return;
153
+ }
154
+ job.emitter.on('log', onLog);
155
+ job.emitter.once('done', onDone);
156
+ req.on('close', cleanup);
157
+ });
158
+ router.delete('/install/:jobId', (req, res) => {
159
+ const job = getHermesInstallJob(req.params.jobId);
160
+ if (!job) {
161
+ res.status(404).json({
162
+ error: {
163
+ code: 'HERMES_INSTALL_JOB_NOT_FOUND',
164
+ message: 'Hermes install job not found.',
165
+ },
166
+ });
167
+ return;
168
+ }
169
+ res.json({ cancelled: cancelHermesInstallJob(req.params.jobId) });
170
+ });
92
171
  router.get('/agents', (_req, res) => {
93
172
  res.json({
94
173
  agent: 'hermes',
@@ -1 +1 @@
1
- {"version":3,"file":"hermes.routes.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/hermes/hermes.routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hermes.routes.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/hermes/hermes.routes.ts"],"names":[],"mappings":"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"}