@markus-global/cli 0.7.3-rc.0 → 0.7.3-rc.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.
package/dist/tray.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  /**
2
2
  * Cross-platform system tray controller for Markus.
3
3
  * Provides start/stop controls and quick access to the Web UI.
4
- *
5
- * Launched by the desktop shortcut / .app instead of `markus start` directly.
6
4
  */
7
5
  export {};
8
6
  //# sourceMappingURL=tray.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/tray.js CHANGED
@@ -1,42 +1,92 @@
1
1
  /**
2
2
  * Cross-platform system tray controller for Markus.
3
3
  * Provides start/stop controls and quick access to the Web UI.
4
- *
5
- * Launched by the desktop shortcut / .app instead of `markus start` directly.
6
4
  */
7
5
  import { spawn, exec, execSync } from 'node:child_process';
8
- import { readFileSync, existsSync, mkdirSync } from 'node:fs';
6
+ import { readFileSync, existsSync, mkdirSync, appendFileSync } from 'node:fs';
9
7
  import { get as httpGet } from 'node:http';
10
8
  import { createConnection } from 'node:net';
11
- import { resolve, dirname } from 'node:path';
9
+ import { resolve, dirname, join } from 'node:path';
12
10
  import { fileURLToPath } from 'node:url';
13
11
  import { platform, homedir } from 'node:os';
14
12
  import SysTrayModule from 'systray2';
15
- // systray2 is CJS; default export is the class
16
13
  const SysTray = SysTrayModule.default || SysTrayModule;
17
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
18
15
  const WEB_UI_PORT = 8056;
19
16
  const WEB_UI_URL = `http://localhost:${WEB_UI_PORT}`;
20
- // Resolve paths relative to the binary distribution layout:
21
- // bin/tray.mjs (this file)
22
- // bin/node (bundled node)
23
- // bin/markus.mjs
24
17
  const BIN_DIR = __dirname;
25
18
  const APP_DIR = resolve(BIN_DIR, '..');
26
- const NODE_BIN = resolve(BIN_DIR, platform() === 'win32' ? 'node.exe' : 'node');
27
- const MARKUS_MJS = resolve(BIN_DIR, 'markus.mjs');
28
19
  const LOG_DIR = resolve(homedir(), '.markus', 'logs');
20
+ const LOG_FILE = join(LOG_DIR, 'tray-stderr.log');
21
+ // Resolve the markus command: prefer the symlink in /usr/local/bin,
22
+ // then fall back to the bundled wrapper script, then to direct node invocation.
23
+ function resolveMarkusCommand() {
24
+ const symlink = '/usr/local/bin/markus';
25
+ if (existsSync(symlink)) {
26
+ return { cmd: symlink, args: ['start'] };
27
+ }
28
+ const wrapper = resolve(APP_DIR, 'markus');
29
+ if (existsSync(wrapper)) {
30
+ return { cmd: wrapper, args: ['start'] };
31
+ }
32
+ const nodeBin = resolve(BIN_DIR, platform() === 'win32' ? 'node.exe' : 'node');
33
+ const markusMjs = resolve(BIN_DIR, 'markus.mjs');
34
+ return { cmd: nodeBin, args: [markusMjs, 'start'] };
35
+ }
36
+ const STRINGS = {
37
+ en: {
38
+ openUI: 'Open Web UI',
39
+ startServer: 'Start Server',
40
+ stopServer: 'Stop Server',
41
+ quit: 'Quit Markus',
42
+ tooltipRunning: 'Markus (running)',
43
+ tooltipStopped: 'Markus (stopped)',
44
+ portConflictTitle: 'Markus',
45
+ 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`,
46
+ },
47
+ zh: {
48
+ openUI: '打开控制台',
49
+ startServer: '启动服务',
50
+ stopServer: '停止服务',
51
+ quit: '退出 Markus',
52
+ tooltipRunning: 'Markus (运行中)',
53
+ tooltipStopped: 'Markus (已停止)',
54
+ portConflictTitle: 'Markus',
55
+ portConflictMsg: (port, occupant) => `端口 ${port} 已被 "${occupant}" 占用。\\nMarkus 无法启动。\\n\\n请释放端口或在 ~/.markus/markus.json 中修改端口`,
56
+ },
57
+ };
58
+ function detectLocale() {
59
+ const lang = (process.env['LANG'] ?? process.env['LC_ALL'] ?? process.env['LANGUAGE'] ?? '').toLowerCase();
60
+ if (lang.startsWith('zh'))
61
+ return 'zh';
62
+ if (platform() === 'darwin') {
63
+ try {
64
+ const appleLang = execSync('defaults read -g AppleLanguages 2>/dev/null', { encoding: 'utf-8' });
65
+ if (/zh/.test(appleLang))
66
+ return 'zh';
67
+ }
68
+ catch { /* ignore */ }
69
+ }
70
+ return 'en';
71
+ }
72
+ const t = STRINGS[detectLocale()];
73
+ // ── Logging ───────────────────────────────────────────────────────────────────
74
+ function trayLog(msg) {
75
+ const ts = new Date().toISOString();
76
+ const line = `${ts} ${msg}\n`;
77
+ try {
78
+ mkdirSync(LOG_DIR, { recursive: true });
79
+ appendFileSync(LOG_FILE, line);
80
+ }
81
+ catch { /* ignore */ }
82
+ console.error(line.trimEnd());
83
+ }
84
+ // ── Helpers ───────────────────────────────────────────────────────────────────
29
85
  function loadIconBase64() {
30
- const candidates = [
31
- resolve(APP_DIR, 'logo.png'),
32
- resolve(APP_DIR, 'markus.ico'),
33
- ];
34
- for (const p of candidates) {
35
- if (existsSync(p)) {
86
+ for (const p of [resolve(APP_DIR, 'logo.png'), resolve(APP_DIR, 'markus.ico')]) {
87
+ if (existsSync(p))
36
88
  return readFileSync(p).toString('base64');
37
- }
38
89
  }
39
- // Fallback: empty icon (systray2 will show a default)
40
90
  return '';
41
91
  }
42
92
  function openBrowser(url) {
@@ -46,23 +96,18 @@ function openBrowser(url) {
46
96
  : `xdg-open "${url}"`;
47
97
  exec(cmd, () => { });
48
98
  }
49
- // ── Server process management ────────────────────────────────────────────────
50
- let serverProcess = null;
51
- let serverRunning = false;
52
99
  function isPortListening(port) {
53
- return new Promise((resolve) => {
54
- const socket = createConnection({ port, host: '127.0.0.1' }, () => {
55
- socket.destroy();
56
- resolve(true);
57
- });
58
- socket.on('error', () => {
59
- socket.destroy();
60
- resolve(false);
61
- });
62
- socket.setTimeout(2000, () => {
63
- socket.destroy();
64
- resolve(false);
65
- });
100
+ return new Promise((res) => {
101
+ const socket = createConnection({ port, host: '127.0.0.1' }, () => { socket.destroy(); res(true); });
102
+ socket.on('error', () => { socket.destroy(); res(false); });
103
+ socket.setTimeout(2000, () => { socket.destroy(); res(false); });
104
+ });
105
+ }
106
+ function checkHealthOnce(url) {
107
+ return new Promise((res) => {
108
+ const req = httpGet(url, (r) => { r.resume(); res(r.statusCode !== undefined && r.statusCode >= 200 && r.statusCode < 400); });
109
+ req.on('error', () => res(false));
110
+ req.setTimeout(2000, () => { req.destroy(); res(false); });
66
111
  });
67
112
  }
68
113
  function waitForHealth(url, intervalMs = 500, maxMs = 30000) {
@@ -73,69 +118,60 @@ function waitForHealth(url, intervalMs = 500, maxMs = 30000) {
73
118
  res.resume();
74
119
  if (res.statusCode && res.statusCode >= 200 && res.statusCode < 400) {
75
120
  ok(true);
121
+ return;
76
122
  }
77
- else if (Date.now() >= deadline) {
78
- ok(false);
79
- }
80
- else {
81
- setTimeout(check, intervalMs);
82
- }
83
- });
84
- req.on('error', () => {
85
123
  if (Date.now() >= deadline) {
86
124
  ok(false);
125
+ return;
87
126
  }
88
- else {
89
- setTimeout(check, intervalMs);
90
- }
127
+ setTimeout(check, intervalMs);
91
128
  });
92
- req.setTimeout(2000, () => { req.destroy(); });
129
+ req.on('error', () => { if (Date.now() >= deadline)
130
+ ok(false);
131
+ else
132
+ setTimeout(check, intervalMs); });
133
+ req.setTimeout(2000, () => req.destroy());
93
134
  };
94
135
  check();
95
136
  });
96
137
  }
97
- function checkHealthOnce(url) {
98
- return new Promise((resolve) => {
99
- const req = httpGet(url, (res) => {
100
- res.resume();
101
- resolve(res.statusCode !== undefined && res.statusCode >= 200 && res.statusCode < 400);
102
- });
103
- req.on('error', () => resolve(false));
104
- req.setTimeout(2000, () => { req.destroy(); resolve(false); });
105
- });
106
- }
107
- function showPortConflictDialog(port) {
108
- if (platform() === 'darwin') {
109
- let occupant = 'unknown';
110
- try {
111
- occupant = execSync(`lsof -i :${port} -sTCP:LISTEN -t 2>/dev/null | head -1 | xargs ps -p -o comm= 2>/dev/null`, { encoding: 'utf-8' }).trim() || 'unknown';
112
- }
113
- catch { /* ignore */ }
114
- exec(`osascript -e 'display dialog "Port ${port} is already in use by \\"${occupant}\\".\nMarkus cannot start.\n\nFree the port or change it in ~/.markus/markus.json" with title "Markus" buttons {"OK"} default button "OK" with icon stop'`, () => { });
115
- }
116
- else {
117
- console.error(`Port ${port} is already in use by another process. Markus cannot start.`);
118
- }
119
- }
138
+ // ── Server process management ────────────────────────────────────────────────
139
+ let serverProcess = null;
140
+ let serverRunning = false;
120
141
  async function startServer() {
121
142
  if (serverRunning)
122
143
  return;
123
144
  if (await isPortListening(WEB_UI_PORT)) {
124
- // Port is occupied — verify it's actually Markus via health endpoint
125
145
  const isMarkus = await checkHealthOnce(`${WEB_UI_URL}/api/health`);
126
146
  if (isMarkus) {
147
+ trayLog(`Port ${WEB_UI_PORT} is Markus — opening browser`);
127
148
  serverRunning = true;
128
149
  updateTrayMenu();
129
150
  openBrowser(WEB_UI_URL);
130
151
  return;
131
152
  }
132
- // Port occupied by a non-Markus process
133
- showPortConflictDialog(WEB_UI_PORT);
153
+ // Port occupied by something else
154
+ let occupant = 'unknown';
155
+ try {
156
+ occupant = execSync(`lsof -i :${WEB_UI_PORT} -sTCP:LISTEN -t 2>/dev/null | head -1 | xargs ps -p -o comm= 2>/dev/null`, { encoding: 'utf-8' }).trim() || 'unknown';
157
+ }
158
+ catch { /* ignore */ }
159
+ trayLog(`Port ${WEB_UI_PORT} occupied by "${occupant}" — showing conflict dialog`);
160
+ if (platform() === 'darwin') {
161
+ exec(`osascript -e 'display dialog "${t.portConflictMsg(WEB_UI_PORT, occupant)}" with title "${t.portConflictTitle}" buttons {"OK"} default button "OK" with icon stop'`, () => { });
162
+ }
134
163
  return;
135
164
  }
136
165
  mkdirSync(LOG_DIR, { recursive: true });
137
- serverProcess = spawn(NODE_BIN, [MARKUS_MJS, 'start'], {
138
- stdio: 'ignore',
166
+ const { cmd, args } = resolveMarkusCommand();
167
+ trayLog(`Starting server: ${cmd} ${args.join(' ')}`);
168
+ const stdoutLog = join(LOG_DIR, 'stdout.log');
169
+ const stderrLog = join(LOG_DIR, 'stderr.log');
170
+ const { openSync } = await import('node:fs');
171
+ const outFd = openSync(stdoutLog, 'a');
172
+ const errFd = openSync(stderrLog, 'a');
173
+ serverProcess = spawn(cmd, args, {
174
+ stdio: ['ignore', outFd, errFd],
139
175
  detached: false,
140
176
  env: { ...process.env, NO_BROWSER: '1' },
141
177
  });
@@ -146,25 +182,30 @@ async function startServer() {
146
182
  serverProcess = null;
147
183
  updateTrayMenu();
148
184
  if (code && code !== 0) {
149
- console.error(`Markus server exited with code ${code}`);
185
+ trayLog(`Server exited with code ${code} — check ${stderrLog}`);
150
186
  }
151
187
  });
152
188
  serverProcess.on('error', (err) => {
153
189
  serverRunning = false;
154
190
  serverProcess = null;
155
191
  updateTrayMenu();
156
- console.error('Failed to start Markus server:', err.message);
192
+ trayLog(`Failed to spawn server: ${err.message}`);
157
193
  });
158
194
  waitForHealth(`${WEB_UI_URL}/api/health`).then((ok) => {
159
- if (ok && serverRunning)
195
+ if (ok && serverRunning) {
196
+ trayLog('Server healthy — opening browser');
160
197
  openBrowser(WEB_UI_URL);
198
+ }
199
+ else if (!ok) {
200
+ trayLog(`Server did not become healthy within 30s — check ${stderrLog}`);
201
+ }
161
202
  });
162
203
  }
163
204
  function stopServer() {
164
205
  if (!serverProcess)
165
206
  return;
207
+ trayLog('Stopping server...');
166
208
  serverProcess.kill('SIGTERM');
167
- // Force kill after 5 seconds if still alive
168
209
  const forceTimer = setTimeout(() => {
169
210
  if (serverProcess && !serverProcess.killed) {
170
211
  serverProcess.kill('SIGKILL');
@@ -174,23 +215,19 @@ function stopServer() {
174
215
  }
175
216
  // ── Tray setup ───────────────────────────────────────────────────────────────
176
217
  const SEPARATOR = { title: '<SEPARATOR>', tooltip: '', enabled: true };
177
- const ITEM_OPEN_UI = { title: 'Open Web UI', tooltip: 'Open Markus in browser', enabled: true };
178
- const ITEM_START = { title: 'Start Server', tooltip: 'Start Markus server', enabled: true };
179
- const ITEM_STOP = { title: 'Stop Server', tooltip: 'Stop Markus server', enabled: false };
180
- const ITEM_QUIT = { title: 'Quit Markus', tooltip: 'Stop server and quit', enabled: true };
181
218
  let tray = null;
182
219
  function buildMenu() {
183
220
  return {
184
221
  icon: loadIconBase64(),
185
222
  title: '',
186
- tooltip: serverRunning ? 'Markus (running)' : 'Markus (stopped)',
223
+ tooltip: serverRunning ? t.tooltipRunning : t.tooltipStopped,
187
224
  items: [
188
- { ...ITEM_OPEN_UI, enabled: serverRunning },
225
+ { title: t.openUI, tooltip: t.openUI, enabled: serverRunning },
189
226
  SEPARATOR,
190
- { ...ITEM_START, enabled: !serverRunning },
191
- { ...ITEM_STOP, enabled: serverRunning },
227
+ { title: t.startServer, tooltip: t.startServer, enabled: !serverRunning },
228
+ { title: t.stopServer, tooltip: t.stopServer, enabled: serverRunning },
192
229
  SEPARATOR,
193
- ITEM_QUIT,
230
+ { title: t.quit, tooltip: t.quit, enabled: true },
194
231
  ],
195
232
  };
196
233
  }
@@ -200,22 +237,22 @@ function updateTrayMenu() {
200
237
  tray.sendAction({ type: 'update-menu', menu: buildMenu() });
201
238
  }
202
239
  async function main() {
240
+ trayLog(`Tray starting (locale=${detectLocale()}, pid=${process.pid})`);
203
241
  tray = new SysTray({ menu: buildMenu(), copyDir: false });
204
242
  await tray.ready();
205
243
  tray.onClick(async (action) => {
206
244
  const title = action.item.title;
207
- if (title === ITEM_OPEN_UI.title) {
245
+ if (title === t.openUI) {
208
246
  openBrowser(WEB_UI_URL);
209
247
  }
210
- else if (title === ITEM_START.title) {
248
+ else if (title === t.startServer) {
211
249
  await startServer();
212
250
  }
213
- else if (title === ITEM_STOP.title) {
251
+ else if (title === t.stopServer) {
214
252
  stopServer();
215
253
  }
216
- else if (title === ITEM_QUIT.title) {
254
+ else if (title === t.quit) {
217
255
  stopServer();
218
- // Wait briefly for server to stop, then exit
219
256
  setTimeout(async () => {
220
257
  if (tray)
221
258
  await tray.kill(false);
@@ -224,13 +261,12 @@ async function main() {
224
261
  }
225
262
  });
226
263
  tray.onError((err) => {
227
- console.error('Tray error:', err.message);
264
+ trayLog(`Tray error: ${err.message}`);
228
265
  });
229
- // Auto-start the server on launch
230
266
  await startServer();
231
267
  }
232
268
  main().catch((err) => {
233
- console.error('Tray failed to start:', err);
269
+ trayLog(`Tray failed to start: ${err}`);
234
270
  process.exit(1);
235
271
  });
236
272
  //# sourceMappingURL=tray.js.map
package/dist/tray.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tray.js","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tray.js","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"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"}