cli-jaw 1.0.5 → 1.2.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 (66) hide show
  1. package/README.ko.md +47 -20
  2. package/README.md +88 -57
  3. package/README.zh-CN.md +44 -17
  4. package/dist/bin/cli-jaw.js +5 -1
  5. package/dist/bin/cli-jaw.js.map +1 -1
  6. package/dist/bin/commands/browser.js +9 -3
  7. package/dist/bin/commands/browser.js.map +1 -1
  8. package/dist/bin/commands/doctor.js +85 -58
  9. package/dist/bin/commands/doctor.js.map +1 -1
  10. package/dist/bin/commands/launchd.js +2 -25
  11. package/dist/bin/commands/launchd.js.map +1 -1
  12. package/dist/bin/commands/service.js +283 -0
  13. package/dist/bin/commands/service.js.map +1 -0
  14. package/dist/lib/quota-copilot.js +133 -14
  15. package/dist/lib/quota-copilot.js.map +1 -1
  16. package/dist/lib/upload.js +2 -1
  17. package/dist/lib/upload.js.map +1 -1
  18. package/dist/server.js +33 -26
  19. package/dist/server.js.map +1 -1
  20. package/dist/src/agent/spawn.js +100 -7
  21. package/dist/src/agent/spawn.js.map +1 -1
  22. package/dist/src/browser/connection.js +93 -12
  23. package/dist/src/browser/connection.js.map +1 -1
  24. package/dist/src/browser/index.js +1 -1
  25. package/dist/src/browser/index.js.map +1 -1
  26. package/dist/src/cli/command-context.js +9 -4
  27. package/dist/src/cli/command-context.js.map +1 -1
  28. package/dist/src/cli/commands.js +25 -12
  29. package/dist/src/cli/commands.js.map +1 -1
  30. package/dist/src/cli/handlers.js +43 -6
  31. package/dist/src/cli/handlers.js.map +1 -1
  32. package/dist/src/cli/registry.js +2 -2
  33. package/dist/src/cli/registry.js.map +1 -1
  34. package/dist/src/command-contract/policy.js +5 -3
  35. package/dist/src/command-contract/policy.js.map +1 -1
  36. package/dist/src/core/config.js +1 -0
  37. package/dist/src/core/config.js.map +1 -1
  38. package/dist/src/core/instance.js +47 -0
  39. package/dist/src/core/instance.js.map +1 -0
  40. package/dist/src/orchestrator/collect.js +1 -1
  41. package/dist/src/orchestrator/collect.js.map +1 -1
  42. package/dist/src/orchestrator/gateway.js +4 -4
  43. package/dist/src/orchestrator/gateway.js.map +1 -1
  44. package/dist/src/prompt/builder.js +1 -0
  45. package/dist/src/prompt/builder.js.map +1 -1
  46. package/dist/src/routes/browser.js +24 -22
  47. package/dist/src/routes/browser.js.map +1 -1
  48. package/dist/src/routes/quota.js +20 -7
  49. package/dist/src/routes/quota.js.map +1 -1
  50. package/dist/src/telegram/bot.js +42 -11
  51. package/dist/src/telegram/bot.js.map +1 -1
  52. package/dist/src/telegram/telegram-file.js +121 -0
  53. package/dist/src/telegram/telegram-file.js.map +1 -0
  54. package/package.json +1 -1
  55. package/public/css/sidebar.css +17 -0
  56. package/public/dist/bundle.js +33 -33
  57. package/public/dist/bundle.js.map +3 -3
  58. package/public/index.html +8 -2
  59. package/public/js/features/settings.ts +37 -10
  60. package/public/js/main.ts +3 -1
  61. package/public/js/render.ts +76 -19
  62. package/public/js/ui.ts +5 -2
  63. package/public/js/ws.ts +4 -0
  64. package/public/locales/en.json +16 -0
  65. package/public/locales/ko.json +16 -0
  66. package/scripts/install.sh +200 -0
@@ -43,6 +43,12 @@ function hasWslWindowsChrome() {
43
43
  ];
44
44
  return paths.some(p => fs.existsSync(p));
45
45
  }
46
+ /** Detect headless server (no display, no desktop environment). */
47
+ function isHeadless() {
48
+ if (process.platform !== 'linux')
49
+ return false;
50
+ return !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY && !isWSL();
51
+ }
46
52
  function check(name, fn) {
47
53
  try {
48
54
  const detail = fn();
@@ -138,21 +144,6 @@ if (process.platform === 'darwin') {
138
144
  }
139
145
  });
140
146
  }
141
- if (process.platform === 'linux') {
142
- check('Display Server', () => {
143
- if (process.env.WAYLAND_DISPLAY)
144
- return `Wayland (${process.env.WAYLAND_DISPLAY})`;
145
- if (process.env.DISPLAY)
146
- return `X11 (${process.env.DISPLAY})`;
147
- if (isWSL()) {
148
- if (hasWslWindowsChrome()) {
149
- return 'WSL (no DISPLAY; Windows Chrome path detected via /mnt/c)';
150
- }
151
- throw new Error('WARN: no DISPLAY in WSL — enable WSLg/set DISPLAY, or install Windows Chrome for /mnt/c fallback');
152
- }
153
- throw new Error('WARN: no DISPLAY — browser skill needs X11/Wayland');
154
- });
155
- }
156
147
  // 9. Skill dependencies (Phase 9)
157
148
  check('uv (Python)', () => {
158
149
  try {
@@ -166,55 +157,91 @@ check('uv (Python)', () => {
166
157
  throw new Error(`WARN: not installed — run: ${installHint}`);
167
158
  }
168
159
  });
169
- check('playwright-core', () => {
170
- try {
171
- execSync('node -e "require.resolve(\'playwright-core\')"', { stdio: 'pipe' });
172
- return 'installed';
160
+ const headless = isHeadless();
161
+ if (headless) {
162
+ // Headless server: browser checks are optional, show as INFO instead of WARN
163
+ if (!values.json) {
164
+ console.log('\n \u2139\ufe0f Browser checks (optional on headless server):');
165
+ console.log(' Display Server: skipped (headless)');
166
+ console.log(' playwright-core: skipped (headless)');
167
+ console.log(' Google Chrome: skipped (headless)');
173
168
  }
174
- catch {
175
- throw new Error('WARN: not installed — run: npm i -g playwright-core');
169
+ results.push({ name: 'Display Server', status: 'info', detail: 'headless server \u2014 skipped' }, { name: 'playwright-core', status: 'info', detail: 'headless server \u2014 skipped' }, { name: 'Google Chrome', status: 'info', detail: 'headless server \u2014 skipped' });
170
+ }
171
+ else {
172
+ if (process.platform === 'linux') {
173
+ check('Display Server', () => {
174
+ if (process.env.WAYLAND_DISPLAY)
175
+ return `Wayland (${process.env.WAYLAND_DISPLAY})`;
176
+ if (process.env.DISPLAY)
177
+ return `X11 (${process.env.DISPLAY})`;
178
+ if (isWSL()) {
179
+ if (hasWslWindowsChrome()) {
180
+ return 'WSL (no DISPLAY; Windows Chrome path detected via /mnt/c)';
181
+ }
182
+ throw new Error('WARN: no DISPLAY in WSL \u2014 enable WSLg/set DISPLAY, or install Windows Chrome for /mnt/c fallback');
183
+ }
184
+ throw new Error('WARN: no DISPLAY \u2014 browser skill needs X11/Wayland');
185
+ });
176
186
  }
177
- });
178
- check('Google Chrome', () => {
179
- if (process.platform === 'darwin') {
180
- if (fs.existsSync('/Applications/Google Chrome.app'))
187
+ check('playwright-core', () => {
188
+ // Check global install via npm root -g (more reliable than require.resolve for global packages)
189
+ try {
190
+ const globalRoot = execSync('npm root -g', { encoding: 'utf8', stdio: 'pipe' }).trim();
191
+ if (fs.existsSync(path.join(globalRoot, 'playwright-core')))
192
+ return 'installed (global)';
193
+ }
194
+ catch { /* npm not available or error */ }
195
+ // Fallback: check require.resolve (works for local installs)
196
+ try {
197
+ execSync('node -e "require.resolve(\'playwright-core\')"', { stdio: 'pipe' });
181
198
  return 'installed';
182
- if (fs.existsSync(path.join(os.homedir(), 'Applications/Google Chrome.app')))
183
- return 'installed (user)';
184
- }
185
- else if (process.platform === 'win32') {
186
- const pf = process.env.PROGRAMFILES || 'C:\\Program Files';
187
- const pf86 = process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)';
188
- const local = process.env.LOCALAPPDATA || '';
189
- const winPaths = [
190
- `${pf}\\Google\\Chrome\\Application\\chrome.exe`,
191
- `${pf86}\\Google\\Chrome\\Application\\chrome.exe`,
192
- `${local}\\Google\\Chrome\\Application\\chrome.exe`,
193
- `${pf}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe`,
194
- ];
195
- for (const p of winPaths) {
196
- if (p && fs.existsSync(p))
197
- return 'installed';
198
199
  }
199
- }
200
- else {
201
- const linuxPaths = [
202
- '/usr/bin/google-chrome-stable',
203
- '/usr/bin/google-chrome',
204
- '/usr/bin/chromium-browser',
205
- '/usr/bin/chromium',
206
- '/snap/bin/chromium',
207
- '/usr/bin/brave-browser',
208
- '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe',
209
- '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',
210
- ];
211
- for (const p of linuxPaths) {
212
- if (fs.existsSync(p))
200
+ catch {
201
+ throw new Error('WARN: not installed \u2014 run: npm i -g playwright-core');
202
+ }
203
+ });
204
+ check('Google Chrome', () => {
205
+ if (process.platform === 'darwin') {
206
+ if (fs.existsSync('/Applications/Google Chrome.app'))
213
207
  return 'installed';
208
+ if (fs.existsSync(path.join(os.homedir(), 'Applications/Google Chrome.app')))
209
+ return 'installed (user)';
214
210
  }
215
- }
216
- throw new Error('WARN: not found required for browser skill');
217
- });
211
+ else if (process.platform === 'win32') {
212
+ const pf = process.env.PROGRAMFILES || 'C:\\Program Files';
213
+ const pf86 = process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)';
214
+ const local = process.env.LOCALAPPDATA || '';
215
+ const winPaths = [
216
+ `${pf}\\Google\\Chrome\\Application\\chrome.exe`,
217
+ `${pf86}\\Google\\Chrome\\Application\\chrome.exe`,
218
+ `${local}\\Google\\Chrome\\Application\\chrome.exe`,
219
+ `${pf}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe`,
220
+ ];
221
+ for (const p of winPaths) {
222
+ if (p && fs.existsSync(p))
223
+ return 'installed';
224
+ }
225
+ }
226
+ else {
227
+ const linuxPaths = [
228
+ '/usr/bin/google-chrome-stable',
229
+ '/usr/bin/google-chrome',
230
+ '/usr/bin/chromium-browser',
231
+ '/usr/bin/chromium',
232
+ '/snap/bin/chromium',
233
+ '/usr/bin/brave-browser',
234
+ '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe',
235
+ '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',
236
+ ];
237
+ for (const p of linuxPaths) {
238
+ if (fs.existsSync(p))
239
+ return 'installed';
240
+ }
241
+ }
242
+ throw new Error('WARN: not found \u2014 required for browser skill');
243
+ });
244
+ }
218
245
  // Output
219
246
  if (values.json) {
220
247
  console.log(JSON.stringify({ checks: results }, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../bin/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../bin/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -8,18 +8,11 @@
8
8
  */
9
9
  import { execSync } from 'node:child_process';
10
10
  import { existsSync, writeFileSync, unlinkSync } from 'node:fs';
11
- import { join, basename } from 'node:path';
11
+ import { join } from 'node:path';
12
12
  import { homedir } from 'node:os';
13
- import { createHash } from 'node:crypto';
14
13
  import { parseArgs } from 'node:util';
15
14
  import { JAW_HOME } from '../../src/core/config.js';
16
- function instanceId() {
17
- const base = basename(JAW_HOME);
18
- if (base === '.cli-jaw')
19
- return 'default';
20
- const hash = createHash('md5').update(JAW_HOME).digest('hex').slice(0, 8);
21
- return `${base.replace(/^\./, '')}-${hash}`;
22
- }
15
+ import { instanceId, getNodePath, getJawPath } from '../../src/core/instance.js';
23
16
  const xmlEsc = (s) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
24
17
  // parseArgs is safe here — launchd is a leaf command (no subcommands to absorb)
25
18
  const { values: launchdOpts, positionals: launchdPos } = parseArgs({
@@ -42,22 +35,6 @@ const INSTANCE = instanceId();
42
35
  const LABEL = `com.cli-jaw.${INSTANCE}`;
43
36
  const PLIST_PATH = join(homedir(), 'Library', 'LaunchAgents', `${LABEL}.plist`);
44
37
  const LOG_DIR = join(JAW_HOME, 'logs');
45
- function getNodePath() {
46
- try {
47
- return execSync('which node', { encoding: 'utf8' }).trim();
48
- }
49
- catch {
50
- return '/usr/local/bin/node';
51
- }
52
- }
53
- function getJawPath() {
54
- try {
55
- return execSync('which jaw', { encoding: 'utf8' }).trim();
56
- }
57
- catch {
58
- return execSync('which cli-jaw', { encoding: 'utf8' }).trim();
59
- }
60
- }
61
38
  function generatePlist() {
62
39
  const nodePath = getNodePath();
63
40
  const jawPath = getJawPath();
@@ -1 +1 @@
1
- {"version":3,"file":"launchd.js","sourceRoot":"","sources":["../../../bin/commands/launchd.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,SAAS,UAAU;IACf,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAEnG,gFAAgF;AAChF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAC/D,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACtD,MAAM,EAAE,KAAK;IACb,gBAAgB,EAAE,IAAI;CACzB,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,WAAW,CAAC,IAAc,CAAC;AAExC,8DAA8D;AAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;AAC9B,MAAM,KAAK,GAAG,eAAe,QAAQ,EAAE,CAAC;AACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;AAChF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEvC,SAAS,WAAW;IAChB,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IACnE,MAAM,CAAC;QAAC,OAAO,qBAAqB,CAAC;IAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU;IACf,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IAClE,MAAM,CAAC;QAAC,OAAO,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa;IAClB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,QAAQ,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAElC,OAAO;;;;;cAKG,MAAM,CAAC,KAAK,CAAC;;;kBAGT,MAAM,CAAC,QAAQ,CAAC;kBAChB,MAAM,CAAC,OAAO,CAAC;;kBAEf,MAAM,CAAC,QAAQ,CAAC;;;kBAGhB,MAAM,CAAC,IAAI,CAAC;;;;;;;cAOhB,MAAM,CAAC,QAAQ,CAAC;;cAEhB,MAAM,CAAC,OAAO,CAAC;;cAEf,MAAM,CAAC,OAAO,CAAC;;;;kBAIX,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;;kBAE9B,MAAM,CAAC,QAAQ,CAAC;;;SAGzB,CAAC;AACV,CAAC;AAED,SAAS,QAAQ;IACb,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,yBAAyB,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpF,OAAO,CAAC,CAAC,GAAG,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC7B,CAAC;AAED,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAE1B,QAAQ,GAAG,EAAE,CAAC;IACV,KAAK,OAAO,CAAC,CAAC,CAAC;QACX,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,MAAM;QACV,CAAC;QACD,IAAI,CAAC;YAAC,QAAQ,CAAC,qBAAqB,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3F,UAAU,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,MAAM;IACV,CAAC;IACD,KAAK,QAAQ,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,MAAM;QACV,CAAC;QACD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,yBAAyB,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACpF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,gBAAgB,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACnE,CAAC;QACD,MAAM;IACV,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;QACN,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEtC,cAAc;QACd,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,IAAI,CAAC;gBAAC,QAAQ,CAAC,qBAAqB,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC1C,CAAC;QAED,cAAc;QACd,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;QAEzC,qBAAqB;QACrB,QAAQ,CAAC,sBAAsB,UAAU,GAAG,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEtC,WAAW;QACX,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,QAAQ,EAAE,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,gBAAgB,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,gBAAgB,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,MAAM;IACV,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"launchd.js","sourceRoot":"","sources":["../../../bin/commands/launchd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * cli-jaw service — 크로스 플랫폼 서비스 관리
3
+ * Usage:
4
+ * jaw service — OS 감지 → 설치 + 시작 (원스텝)
5
+ * jaw service --port 3458 — 커스텀 포트로 등록
6
+ * jaw service status — 현재 상태 확인
7
+ * jaw service unset — 서비스 제거
8
+ * jaw service logs — 로그 보기
9
+ */
10
+ import { execFileSync, spawn as nodeSpawn } from 'node:child_process';
11
+ import { existsSync, writeFileSync, readFileSync, mkdirSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { parseArgs } from 'node:util';
14
+ import { JAW_HOME } from '../../src/core/config.js';
15
+ import { instanceId, getNodePath, getJawPath, sanitizeUnitName } from '../../src/core/instance.js';
16
+ // ─── Args ────────────────────────────────────────────
17
+ const { values: opts, positionals: pos } = parseArgs({
18
+ args: process.argv.slice(3),
19
+ options: {
20
+ port: { type: 'string', default: '3457' },
21
+ backend: { type: 'string' },
22
+ },
23
+ strict: false,
24
+ allowPositionals: true,
25
+ });
26
+ // unknown flag guard
27
+ const knownKeys = new Set(['port', 'backend']);
28
+ for (const key of Object.keys(opts)) {
29
+ if (!knownKeys.has(key)) {
30
+ console.error(`❌ Unknown option: --${key}`);
31
+ console.error(' Usage: jaw service [--port PORT] [--backend systemd|launchd|docker] [status|unset|logs]');
32
+ process.exit(1);
33
+ }
34
+ }
35
+ // --backend whitelist validation
36
+ const VALID_BACKENDS = new Set(['launchd', 'systemd', 'docker']);
37
+ if (opts.backend && !VALID_BACKENDS.has(opts.backend)) {
38
+ console.error(`❌ Unknown backend: ${opts.backend}`);
39
+ console.error(' Supported: launchd, systemd, docker');
40
+ process.exit(1);
41
+ }
42
+ const PORT = opts.port;
43
+ // port validation: must be numeric and in valid range
44
+ const portNum = Number(PORT);
45
+ if (!Number.isInteger(portNum) || portNum < 1 || portNum > 65535) {
46
+ console.error(`\u274c Invalid port: ${PORT}`);
47
+ console.error(' Port must be an integer between 1 and 65535');
48
+ process.exit(1);
49
+ }
50
+ const INSTANCE = instanceId();
51
+ const LOG_DIR = join(JAW_HOME, 'logs');
52
+ function detectBackend() {
53
+ // macOS → launchd
54
+ if (process.platform === 'darwin')
55
+ return 'launchd';
56
+ // Docker container detection
57
+ if (existsSync('/.dockerenv'))
58
+ return 'docker';
59
+ // Linux: verify PID 1 is actually systemd (not just binary installed)
60
+ try {
61
+ const pid1 = readFileSync('/proc/1/comm', 'utf8').trim();
62
+ if (pid1 === 'systemd')
63
+ return 'systemd';
64
+ }
65
+ catch { /* /proc may not exist */ }
66
+ // Fallback: check systemctl exists (less reliable but covers more cases)
67
+ try {
68
+ execFileSync('which', ['systemctl'], { stdio: 'pipe' });
69
+ console.warn('⚠️ PID 1이 systemd가 아닐 수 있습니다. --backend systemd로 강제 지정 가능');
70
+ return 'systemd';
71
+ }
72
+ catch { /* no systemctl */ }
73
+ console.error('❌ 지원되지 않는 환경입니다.');
74
+ console.error(' 지원: macOS (launchd), Linux (systemd), Docker');
75
+ console.error(' 수동 설정은 jaw serve를 tmux/screen에서 실행하세요.');
76
+ process.exit(1);
77
+ }
78
+ const backend = opts.backend || detectBackend();
79
+ // ─── macOS: delegate to launchd command ──────────────
80
+ if (backend === 'launchd') {
81
+ // launchd.ts supports: status, unset, default (install)
82
+ // service.ts additionally supports: logs
83
+ // Map unsupported subcommands for launchd
84
+ const subcommand = pos[0];
85
+ if (subcommand === 'logs') {
86
+ // launchd doesn't have 'logs' → show log file path directly
87
+ const logDir = join(JAW_HOME, 'logs');
88
+ console.log(`📋 macOS launchd logs:\n`);
89
+ console.log(` stdout: ${logDir}/jaw-serve.log`);
90
+ console.log(` stderr: ${logDir}/jaw-serve.err\n`);
91
+ console.log(` tail -f ${logDir}/jaw-serve.log`);
92
+ process.exit(0);
93
+ }
94
+ // Rebuild argv from parsed values — eliminates all --backend variants
95
+ // Only pass --port on install (default). status/unset read from existing plist.
96
+ const isInstall = !subcommand || (subcommand !== 'status' && subcommand !== 'unset');
97
+ const portArgs = isInstall && PORT !== '3457' ? ['--port', PORT] : [];
98
+ process.argv = [
99
+ process.argv[0], process.argv[1],
100
+ 'launchd',
101
+ ...(subcommand ? [subcommand] : []),
102
+ ...portArgs,
103
+ ];
104
+ await import('./launchd.js');
105
+ process.exit(0);
106
+ }
107
+ // ─── Docker: info only ───────────────────────────────
108
+ if (backend === 'docker') {
109
+ console.log('🐳 Docker 컨테이너 내부에서 실행 중입니다.\n');
110
+ console.log(' 컨테이너 자체가 restart policy로 관리됩니다.');
111
+ console.log(' docker-compose.yml의 restart: unless-stopped 설정을 확인하세요.\n');
112
+ console.log(' 상태 확인: docker ps | grep cli-jaw');
113
+ console.log(' 로그 확인: docker logs -f cli-jaw');
114
+ process.exit(0);
115
+ }
116
+ // ═══════════════════════════════════════════════════════
117
+ // systemd backend
118
+ // ═══════════════════════════════════════════════════════
119
+ const SAFE_INSTANCE = sanitizeUnitName(INSTANCE);
120
+ const UNIT_NAME = `jaw-${SAFE_INSTANCE}`;
121
+ const UNIT_PATH = `/etc/systemd/system/${UNIT_NAME}.service`;
122
+ /** Create secure temp file for unit generation. */
123
+ function makeTmpUnit() {
124
+ try {
125
+ return execFileSync('mktemp', ['/tmp/jaw-unit-XXXXXX.service'], { encoding: 'utf8' }).trim();
126
+ }
127
+ catch {
128
+ // fallback if mktemp unavailable
129
+ const fallback = `/tmp/jaw-unit-${Date.now()}-${process.pid}.service`;
130
+ return fallback;
131
+ }
132
+ }
133
+ /** Run a sudo command with visible output (password prompt visible). */
134
+ function sudo(args) {
135
+ execFileSync('sudo', args, { stdio: 'inherit' });
136
+ }
137
+ function generateUnit() {
138
+ const nodePath = getNodePath();
139
+ const jawPath = getJawPath();
140
+ let user;
141
+ try {
142
+ user = execFileSync('whoami', { encoding: 'utf8' }).trim();
143
+ }
144
+ catch {
145
+ user = 'nobody';
146
+ }
147
+ mkdirSync(LOG_DIR, { recursive: true });
148
+ // systemd quoting: paths with spaces must be quoted
149
+ const q = (s) => s.includes(' ') ? `"${s}"` : s;
150
+ return `[Unit]
151
+ Description=CLI-JAW Server (${SAFE_INSTANCE})
152
+ After=network.target
153
+
154
+ [Service]
155
+ Type=simple
156
+ User=${user}
157
+ WorkingDirectory=${q(JAW_HOME)}
158
+ ExecStart=${q(nodePath)} ${q(jawPath)} --home ${q(JAW_HOME)} serve --port ${PORT} --no-open
159
+ Restart=always
160
+ RestartSec=5
161
+ Environment=NODE_ENV=production
162
+ Environment="PATH=${process.env.PATH || '/usr/local/bin:/usr/bin:/bin'}"
163
+ Environment=CLI_JAW_HOME=${q(JAW_HOME)}
164
+ StandardOutput=journal
165
+ StandardError=journal
166
+ SyslogIdentifier=${UNIT_NAME}
167
+
168
+ [Install]
169
+ WantedBy=multi-user.target`;
170
+ }
171
+ function isActive() {
172
+ try {
173
+ return execFileSync('systemctl', ['is-active', UNIT_NAME], { encoding: 'utf8' }).trim();
174
+ }
175
+ catch {
176
+ return 'inactive';
177
+ }
178
+ }
179
+ const sub = pos[0];
180
+ switch (sub) {
181
+ case 'unset': {
182
+ if (!existsSync(UNIT_PATH)) {
183
+ console.log('⚠️ jaw serve가 systemd에 등록되어 있지 않습니다');
184
+ break;
185
+ }
186
+ try {
187
+ sudo(['systemctl', 'stop', UNIT_NAME]);
188
+ }
189
+ catch { /* ok if already stopped */ }
190
+ try {
191
+ sudo(['systemctl', 'disable', UNIT_NAME]);
192
+ }
193
+ catch { /* ok */ }
194
+ sudo(['rm', '-f', UNIT_PATH]);
195
+ sudo(['systemctl', 'daemon-reload']);
196
+ console.log('✅ jaw serve 자동 실행 해제 완료');
197
+ break;
198
+ }
199
+ case 'status': {
200
+ if (!existsSync(UNIT_PATH)) {
201
+ console.log('\u26a0\ufe0f jaw serve\uac00 systemd\uc5d0 \ub4f1\ub85d\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4');
202
+ console.log(' \ub4f1\ub85d: jaw service');
203
+ break;
204
+ }
205
+ // Read actual port from unit file if possible
206
+ let displayPort = PORT;
207
+ try {
208
+ const unitContent = readFileSync(UNIT_PATH, 'utf8');
209
+ const portMatch = unitContent.match(/--port\s+(\d+)/);
210
+ if (portMatch)
211
+ displayPort = portMatch[1];
212
+ }
213
+ catch { /* use CLI port as fallback */ }
214
+ const state = isActive();
215
+ const icon = state === 'active' ? '\ud83d\udfe2' : state === 'failed' ? '\ud83d\udd34' : '\u26aa';
216
+ console.log(`\ud83e\udd88 jaw serve \u2014 ${icon} ${state}`);
217
+ console.log(` instance: ${INSTANCE}`);
218
+ console.log(` unit: ${UNIT_NAME}`);
219
+ console.log(` port: ${displayPort}`);
220
+ console.log(` unit file: ${UNIT_PATH}`);
221
+ console.log(`\n \ub85c\uadf8: jaw service logs`);
222
+ console.log(` \uc911\uc9c0: jaw service unset`);
223
+ break;
224
+ }
225
+ case 'logs': {
226
+ console.log(`📋 journalctl -u ${UNIT_NAME} -f\n`);
227
+ const child = nodeSpawn('journalctl', ['-u', UNIT_NAME, '-f', '--no-pager', '-n', '50'], {
228
+ stdio: 'inherit',
229
+ });
230
+ // Clean exit on Ctrl+C
231
+ const cleanup = () => { child.kill('SIGINT'); process.exit(0); };
232
+ process.on('SIGINT', cleanup);
233
+ process.on('SIGTERM', cleanup);
234
+ child.on('exit', (code) => process.exit(code ?? 0));
235
+ break;
236
+ }
237
+ default: {
238
+ // 원스텝: 유닛 생성 → daemon-reload → enable --now
239
+ console.log('🦈 jaw service setup (systemd)\n');
240
+ if (existsSync(UNIT_PATH)) {
241
+ console.log('📄 기존 유닛 발견 — 재생성합니다');
242
+ try {
243
+ sudo(['systemctl', 'stop', UNIT_NAME]);
244
+ }
245
+ catch { /* ok */ }
246
+ }
247
+ else {
248
+ console.log('📄 유닛 없음 — 새로 생성합니다');
249
+ }
250
+ // 1. 유닛 파일 생성 (mktemp → sudo cp)
251
+ const unit = generateUnit();
252
+ const tmpUnit = makeTmpUnit();
253
+ writeFileSync(tmpUnit, unit);
254
+ sudo(['cp', tmpUnit, UNIT_PATH]);
255
+ try {
256
+ writeFileSync(tmpUnit, '');
257
+ }
258
+ catch { /* cleanup */ }
259
+ console.log(`✅ 유닛 저장: ${UNIT_PATH}`);
260
+ // 2. 등록 + 시작
261
+ sudo(['systemctl', 'daemon-reload']);
262
+ sudo(['systemctl', 'enable', '--now', UNIT_NAME]);
263
+ console.log('✅ systemd 등록 + 시작 완료\n');
264
+ // 3. 상태 확인
265
+ setTimeout(() => {
266
+ const state = isActive();
267
+ if (state === 'active') {
268
+ console.log('🦈 jaw serve가 백그라운드에서 실행 중입니다');
269
+ console.log(` instance: ${INSTANCE}`);
270
+ console.log(` http://localhost:${PORT}`);
271
+ console.log(` 로그: jaw service logs`);
272
+ console.log('\n 해제: jaw service unset');
273
+ }
274
+ else {
275
+ console.log('⚠️ 시작되지 않았습니다. 상태를 확인하세요:');
276
+ console.log(` systemctl status ${UNIT_NAME}`);
277
+ console.log(` journalctl -u ${UNIT_NAME} --no-pager -n 20`);
278
+ }
279
+ }, 2000);
280
+ break;
281
+ }
282
+ }
283
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../bin/commands/service.ts"],"names":[],"mappings":"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"}