@markus-global/cli 0.8.4-rc.2 → 0.8.4-rc.6

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.
@@ -11,7 +11,7 @@
11
11
  <script>
12
12
  (function(){var t=localStorage.getItem('markus-theme');if(t==='midnight'){t='dark';try{localStorage.setItem('markus-theme','dark')}catch(e){}}if(t&&t!=='system')document.documentElement.classList.add(t)})();
13
13
  </script>
14
- <script type="module" crossorigin src="/assets/index-CaLVKoTC.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-CeLhBFUB.js"></script>
15
15
  <link rel="stylesheet" crossorigin href="/assets/index-C6BPIdny.css">
16
16
  </head>
17
17
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markus-global/cli",
3
- "version": "0.8.4-rc.2",
3
+ "version": "0.8.4-rc.6",
4
4
  "description": "Markus — AI Digital Workforce Platform",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",
@@ -26,7 +26,6 @@
26
26
  "clean": "rm -rf dist *.tsbuildinfo templates/"
27
27
  },
28
28
  "dependencies": {
29
- "systray2": "^2.1.4",
30
29
  "ws": "^8.19.0"
31
30
  },
32
31
  "optionalDependencies": {
package/dist/tray.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Cross-platform system tray controller for Markus.
3
- * Launches the server on start, provides "Open Console" and "Quit" controls.
4
- */
5
- export {};
6
- //# sourceMappingURL=tray.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/tray.js DELETED
@@ -1,410 +0,0 @@
1
- /**
2
- * Cross-platform system tray controller for Markus.
3
- * Launches the server on start, provides "Open Console" and "Quit" controls.
4
- */
5
- import { spawn, exec, execSync } from 'node:child_process';
6
- import { readFileSync, existsSync, mkdirSync, appendFileSync, openSync, writeFileSync, unlinkSync } from 'node:fs';
7
- import { get as httpGet } from 'node:http';
8
- import { createConnection } from 'node:net';
9
- import { resolve, dirname, join } from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
- import { platform, homedir } from 'node:os';
12
- import SysTrayModule from 'systray2';
13
- const SysTray = SysTrayModule.default || SysTrayModule;
14
- const __dirname = dirname(fileURLToPath(import.meta.url));
15
- const WEB_UI_PORT = 8056;
16
- const WEB_UI_URL = `http://localhost:${WEB_UI_PORT}`;
17
- const BIN_DIR = __dirname;
18
- const APP_DIR = resolve(BIN_DIR, '..');
19
- const LOG_DIR = resolve(homedir(), '.markus', 'logs');
20
- const LOG_FILE = join(LOG_DIR, 'tray-stderr.log');
21
- const MARKUS_DIR = resolve(homedir(), '.markus');
22
- const LOCK_FILE = join(MARKUS_DIR, 'tray.lock');
23
- const STRINGS = {
24
- en: {
25
- openUI: 'Open Console',
26
- quit: 'Quit Markus',
27
- tooltip: 'Markus',
28
- portConflictTitle: 'Markus',
29
- portConflictMsg: (port, occupant) => `Port ${port} is already in use by "${occupant}".\\nMarkus cannot start.\\n\\nFree the port or change it in ~/.markus/markus.json`,
30
- },
31
- zh: {
32
- openUI: '打开控制台',
33
- quit: '退出 Markus',
34
- tooltip: 'Markus',
35
- portConflictTitle: 'Markus',
36
- portConflictMsg: (port, occupant) => `端口 ${port} 已被 "${occupant}" 占用。\\nMarkus 无法启动。\\n\\n请释放端口或在 ~/.markus/markus.json 中修改端口`,
37
- },
38
- };
39
- function detectLocale() {
40
- const lang = (process.env['LANG'] ?? process.env['LC_ALL'] ?? process.env['LANGUAGE'] ?? '').toLowerCase();
41
- if (lang.startsWith('zh'))
42
- return 'zh';
43
- if (platform() === 'darwin') {
44
- try {
45
- const appleLang = execSync('defaults read -g AppleLanguages 2>/dev/null', { encoding: 'utf-8' });
46
- if (/zh/.test(appleLang))
47
- return 'zh';
48
- }
49
- catch { /* ignore */ }
50
- }
51
- if (platform() === 'win32') {
52
- try {
53
- const winLang = execSync('powershell -NoProfile -Command "(Get-Culture).Name"', { encoding: 'utf-8' }).trim();
54
- if (winLang.startsWith('zh'))
55
- return 'zh';
56
- }
57
- catch { /* ignore */ }
58
- }
59
- return 'en';
60
- }
61
- const t = STRINGS[detectLocale()];
62
- // ── Logging ───────────────────────────────────────────────────────────────────
63
- function trayLog(msg) {
64
- const ts = new Date().toISOString();
65
- const line = `${ts} ${msg}\n`;
66
- try {
67
- mkdirSync(LOG_DIR, { recursive: true });
68
- appendFileSync(LOG_FILE, line);
69
- }
70
- catch { /* ignore */ }
71
- }
72
- // ── Helpers ───────────────────────────────────────────────────────────────────
73
- function loadIconBase64() {
74
- for (const p of [resolve(APP_DIR, 'logo.png'), resolve(APP_DIR, 'markus.ico')]) {
75
- if (existsSync(p))
76
- return readFileSync(p).toString('base64');
77
- }
78
- return '';
79
- }
80
- function openBrowser(url) {
81
- const sys = platform();
82
- const cmd = sys === 'darwin' ? `open "${url}"`
83
- : sys === 'win32' ? `start "" "${url}"`
84
- : `xdg-open "${url}"`;
85
- exec(cmd, (err) => {
86
- if (err)
87
- trayLog(`openBrowser failed: ${err.message}`);
88
- });
89
- }
90
- // ── Singleton lock ────────────────────────────────────────────────────────────
91
- function isProcessAlive(pid) {
92
- try {
93
- process.kill(pid, 0);
94
- return true;
95
- }
96
- catch {
97
- return false;
98
- }
99
- }
100
- function acquireLock() {
101
- try {
102
- mkdirSync(MARKUS_DIR, { recursive: true });
103
- if (existsSync(LOCK_FILE)) {
104
- const pid = parseInt(readFileSync(LOCK_FILE, 'utf-8').trim(), 10);
105
- if (pid && !isNaN(pid) && isProcessAlive(pid)) {
106
- return false;
107
- }
108
- }
109
- writeFileSync(LOCK_FILE, String(process.pid));
110
- return true;
111
- }
112
- catch {
113
- return true;
114
- }
115
- }
116
- function releaseLock() {
117
- try {
118
- if (existsSync(LOCK_FILE)) {
119
- const pid = parseInt(readFileSync(LOCK_FILE, 'utf-8').trim(), 10);
120
- if (pid === process.pid)
121
- unlinkSync(LOCK_FILE);
122
- }
123
- }
124
- catch { /* ignore */ }
125
- }
126
- // ── Port / process helpers ────────────────────────────────────────────────────
127
- function getPortOccupant(port) {
128
- try {
129
- if (platform() === 'win32') {
130
- const out = execSync(`netstat -ano | findstr ":${port}" | findstr "LISTENING"`, { encoding: 'utf-8', timeout: 5000 }).trim();
131
- const firstLine = out.split('\n')[0]?.trim();
132
- if (!firstLine)
133
- return 'unknown';
134
- const pid = firstLine.split(/\s+/).pop();
135
- if (!pid || pid === '0')
136
- return 'unknown';
137
- const taskInfo = execSync(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`, { encoding: 'utf-8', timeout: 5000 }).trim();
138
- return taskInfo.split(',')[0]?.replace(/"/g, '') || 'unknown';
139
- }
140
- else {
141
- return execSync(`lsof -i :${port} -sTCP:LISTEN -t 2>/dev/null | head -1 | xargs ps -p -o comm= 2>/dev/null`, { encoding: 'utf-8', timeout: 5000 }).trim() || 'unknown';
142
- }
143
- }
144
- catch {
145
- return 'unknown';
146
- }
147
- }
148
- function getPidsByPort(port) {
149
- try {
150
- if (platform() === 'win32') {
151
- const out = execSync(`netstat -ano | findstr ":${port}" | findstr "LISTENING"`, { encoding: 'utf-8', timeout: 5000 }).trim();
152
- if (!out)
153
- return [];
154
- const pids = new Set();
155
- for (const line of out.split('\n')) {
156
- const pid = parseInt(line.trim().split(/\s+/).pop() ?? '', 10);
157
- if (pid && !isNaN(pid) && pid !== 0)
158
- pids.add(pid);
159
- }
160
- return [...pids];
161
- }
162
- else {
163
- const out = execSync(`lsof -i :${port} -sTCP:LISTEN -t 2>/dev/null`, { encoding: 'utf-8', timeout: 5000 }).trim();
164
- if (!out)
165
- return [];
166
- return out.split('\n').map(s => parseInt(s.trim(), 10)).filter(n => n && !isNaN(n));
167
- }
168
- }
169
- catch {
170
- return [];
171
- }
172
- }
173
- function killPid(pid) {
174
- try {
175
- if (platform() === 'win32') {
176
- execSync(`taskkill /PID ${pid} /F`, { stdio: 'ignore', timeout: 5000 });
177
- }
178
- else {
179
- process.kill(pid, 'SIGTERM');
180
- }
181
- }
182
- catch { /* ignore */ }
183
- }
184
- function forceKillPid(pid) {
185
- try {
186
- if (platform() === 'win32') {
187
- execSync(`taskkill /PID ${pid} /F`, { stdio: 'ignore', timeout: 5000 });
188
- }
189
- else {
190
- process.kill(pid, 'SIGKILL');
191
- }
192
- }
193
- catch { /* ignore */ }
194
- }
195
- function showPortConflictDialog(port, occupant) {
196
- const msg = t.portConflictMsg(port, occupant);
197
- if (platform() === 'darwin') {
198
- exec(`osascript -e 'display dialog "${msg}" with title "${t.portConflictTitle}" buttons {"OK"} default button "OK" with icon stop'`, () => { });
199
- }
200
- else if (platform() === 'win32') {
201
- const escaped = msg.replace(/'/g, "''");
202
- exec(`powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.MessageBox]::Show('${escaped}','${t.portConflictTitle}','OK','Error')"`, () => { });
203
- }
204
- }
205
- function isPortListening(port) {
206
- return new Promise((res) => {
207
- const socket = createConnection({ port, host: '127.0.0.1' }, () => { socket.destroy(); res(true); });
208
- socket.on('error', () => { socket.destroy(); res(false); });
209
- socket.setTimeout(2000, () => { socket.destroy(); res(false); });
210
- });
211
- }
212
- function checkHealthOnce(url) {
213
- return new Promise((res) => {
214
- const req = httpGet(url, (r) => { r.resume(); res(r.statusCode !== undefined && r.statusCode >= 200 && r.statusCode < 400); });
215
- req.on('error', () => res(false));
216
- req.setTimeout(2000, () => { req.destroy(); res(false); });
217
- });
218
- }
219
- function waitForHealth(url, intervalMs = 500, maxMs = 30000) {
220
- return new Promise((ok) => {
221
- const deadline = Date.now() + maxMs;
222
- const check = () => {
223
- const req = httpGet(url, (res) => {
224
- res.resume();
225
- if (res.statusCode && res.statusCode >= 200 && res.statusCode < 400) {
226
- ok(true);
227
- return;
228
- }
229
- if (Date.now() >= deadline) {
230
- ok(false);
231
- return;
232
- }
233
- setTimeout(check, intervalMs);
234
- });
235
- req.on('error', () => { if (Date.now() >= deadline)
236
- ok(false);
237
- else
238
- setTimeout(check, intervalMs); });
239
- req.setTimeout(2000, () => req.destroy());
240
- };
241
- check();
242
- });
243
- }
244
- function resolveMarkusCommand() {
245
- const symlink = '/usr/local/bin/markus';
246
- if (existsSync(symlink))
247
- return { cmd: symlink, args: ['start'] };
248
- const wrapper = resolve(APP_DIR, 'markus');
249
- if (existsSync(wrapper))
250
- return { cmd: wrapper, args: ['start'] };
251
- const markusBin = resolve(BIN_DIR, 'Markus');
252
- const nodeBin = platform() === 'darwin' && existsSync(markusBin) ? markusBin : resolve(BIN_DIR, platform() === 'win32' ? 'node.exe' : 'node');
253
- const markusMjs = resolve(BIN_DIR, 'markus.mjs');
254
- return { cmd: nodeBin, args: [markusMjs, 'start'] };
255
- }
256
- // ── Server process management ────────────────────────────────────────────────
257
- let serverProcess = null;
258
- async function ensureServerRunning() {
259
- if (await isPortListening(WEB_UI_PORT)) {
260
- const isMarkus = await checkHealthOnce(`${WEB_UI_URL}/api/health`);
261
- if (isMarkus) {
262
- trayLog(`Server already running on port ${WEB_UI_PORT}`);
263
- openBrowser(WEB_UI_URL);
264
- return;
265
- }
266
- const occupant = getPortOccupant(WEB_UI_PORT);
267
- trayLog(`Port ${WEB_UI_PORT} occupied by "${occupant}"`);
268
- showPortConflictDialog(WEB_UI_PORT, occupant);
269
- return;
270
- }
271
- mkdirSync(LOG_DIR, { recursive: true });
272
- const { cmd, args } = resolveMarkusCommand();
273
- trayLog(`Starting server: ${cmd} ${args.join(' ')}`);
274
- const outFd = openSync(join(LOG_DIR, 'stdout.log'), 'a');
275
- const errFd = openSync(join(LOG_DIR, 'stderr.log'), 'a');
276
- serverProcess = spawn(cmd, args, {
277
- stdio: ['ignore', outFd, errFd],
278
- detached: false,
279
- env: { ...process.env, NO_BROWSER: '1' },
280
- windowsHide: true,
281
- });
282
- serverProcess.on('exit', (code) => {
283
- if (code && code !== 0)
284
- trayLog(`Server exited with code ${code}`);
285
- serverProcess = null;
286
- });
287
- serverProcess.on('error', (err) => {
288
- trayLog(`Failed to spawn server: ${err.message}`);
289
- serverProcess = null;
290
- });
291
- const healthy = await waitForHealth(`${WEB_UI_URL}/api/health`);
292
- if (healthy) {
293
- trayLog('Server healthy — opening browser');
294
- openBrowser(WEB_UI_URL);
295
- }
296
- else {
297
- trayLog('Server did not become healthy within 30s');
298
- }
299
- }
300
- /** Stop all Markus server processes and prevent LaunchAgent from restarting. */
301
- function killServer() {
302
- trayLog('Stopping server...');
303
- if (platform() === 'darwin') {
304
- try {
305
- const uid = execSync('id -u', { encoding: 'utf-8' }).trim();
306
- execSync(`launchctl bootout gui/${uid}/global.markus 2>/dev/null`, { encoding: 'utf-8' });
307
- trayLog('LaunchAgent unloaded');
308
- }
309
- catch { /* not loaded or already unloaded */ }
310
- }
311
- if (serverProcess) {
312
- if (platform() === 'win32') {
313
- try {
314
- execSync(`taskkill /PID ${serverProcess.pid} /T /F`, { stdio: 'ignore', timeout: 5000 });
315
- }
316
- catch { /* ignore */ }
317
- }
318
- else {
319
- serverProcess.kill('SIGTERM');
320
- }
321
- serverProcess = null;
322
- }
323
- const pids = getPidsByPort(WEB_UI_PORT).filter(p => p !== process.pid);
324
- for (const pid of pids) {
325
- trayLog(`Killing server process ${pid}`);
326
- killPid(pid);
327
- }
328
- setTimeout(() => {
329
- const remaining = getPidsByPort(WEB_UI_PORT).filter(p => p !== process.pid);
330
- for (const pid of remaining) {
331
- trayLog(`Force killing server process ${pid}`);
332
- forceKillPid(pid);
333
- }
334
- }, 3000);
335
- }
336
- // ── Tray setup ───────────────────────────────────────────────────────────────
337
- let tray = null;
338
- async function main() {
339
- trayLog(`Tray starting (locale=${detectLocale()}, pid=${process.pid})`);
340
- if (!acquireLock()) {
341
- const serverUp = await checkHealthOnce(`${WEB_UI_URL}/api/health`);
342
- if (serverUp) {
343
- trayLog('Another tray instance is already running — opening browser and exiting');
344
- openBrowser(WEB_UI_URL);
345
- setTimeout(() => process.exit(0), 1000);
346
- return;
347
- }
348
- trayLog('Stale lock file detected (server not healthy) — taking over');
349
- try {
350
- unlinkSync(LOCK_FILE);
351
- }
352
- catch { /* ignore */ }
353
- writeFileSync(LOCK_FILE, String(process.pid));
354
- }
355
- process.on('exit', releaseLock);
356
- process.on('SIGINT', () => { releaseLock(); process.exit(0); });
357
- process.on('SIGTERM', () => { releaseLock(); process.exit(0); });
358
- let trayOk = false;
359
- try {
360
- tray = new SysTray({
361
- menu: {
362
- icon: loadIconBase64(),
363
- title: '',
364
- tooltip: t.tooltip,
365
- items: [
366
- { title: t.openUI, tooltip: t.openUI, enabled: true },
367
- { title: '<SEPARATOR>', tooltip: '', enabled: true },
368
- { title: t.quit, tooltip: t.quit, enabled: true },
369
- ],
370
- },
371
- copyDir: false,
372
- });
373
- await tray.ready();
374
- trayOk = true;
375
- tray.onClick(async (action) => {
376
- const title = action.item.title;
377
- if (title === t.openUI) {
378
- openBrowser(WEB_UI_URL);
379
- }
380
- else if (title === t.quit) {
381
- trayLog('Quit requested');
382
- killServer();
383
- setTimeout(async () => {
384
- releaseLock();
385
- if (tray)
386
- await tray.kill(false);
387
- process.exit(0);
388
- }, 4000);
389
- }
390
- });
391
- tray.onError((err) => {
392
- trayLog(`Tray error: ${err.message}`);
393
- });
394
- }
395
- catch (trayErr) {
396
- trayLog(`Tray icon unavailable (${trayErr}) — running in headless mode`);
397
- tray = null;
398
- }
399
- await ensureServerRunning();
400
- if (!trayOk) {
401
- trayLog('Running without tray icon — server is up, keeping process alive');
402
- await new Promise(() => { });
403
- }
404
- }
405
- main().catch((err) => {
406
- trayLog(`Tray failed to start: ${err}`);
407
- releaseLock();
408
- process.exit(1);
409
- });
410
- //# sourceMappingURL=tray.js.map
package/dist/tray.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tray.js","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"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"}