openchrome-mcp 1.9.0 → 1.9.2

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 (117) hide show
  1. package/README.md +55 -1
  2. package/dist/cdp/client.d.ts +6 -0
  3. package/dist/cdp/client.d.ts.map +1 -1
  4. package/dist/cdp/client.js +13 -0
  5. package/dist/cdp/client.js.map +1 -1
  6. package/dist/chrome/headed-fallback.d.ts +3 -0
  7. package/dist/chrome/headed-fallback.d.ts.map +1 -1
  8. package/dist/chrome/headed-fallback.js +4 -0
  9. package/dist/chrome/headed-fallback.js.map +1 -1
  10. package/dist/cli/index.js +0 -0
  11. package/dist/config/global.d.ts +1 -0
  12. package/dist/config/global.d.ts.map +1 -1
  13. package/dist/config/global.js.map +1 -1
  14. package/dist/config/tool-tiers.d.ts.map +1 -1
  15. package/dist/config/tool-tiers.js +3 -0
  16. package/dist/config/tool-tiers.js.map +1 -1
  17. package/dist/connect/clipboard.d.ts +6 -0
  18. package/dist/connect/clipboard.d.ts.map +1 -0
  19. package/dist/connect/clipboard.js +54 -0
  20. package/dist/connect/clipboard.js.map +1 -0
  21. package/dist/connect/config-generator.d.ts +9 -0
  22. package/dist/connect/config-generator.d.ts.map +1 -0
  23. package/dist/connect/config-generator.js +43 -0
  24. package/dist/connect/config-generator.js.map +1 -0
  25. package/dist/connect/hosts.d.ts +9 -0
  26. package/dist/connect/hosts.d.ts.map +1 -0
  27. package/dist/connect/hosts.js +81 -0
  28. package/dist/connect/hosts.js.map +1 -0
  29. package/dist/connect/index.d.ts +8 -0
  30. package/dist/connect/index.d.ts.map +1 -0
  31. package/dist/connect/index.js +15 -0
  32. package/dist/connect/index.js.map +1 -0
  33. package/dist/connect/open-url.d.ts +6 -0
  34. package/dist/connect/open-url.d.ts.map +1 -0
  35. package/dist/connect/open-url.js +42 -0
  36. package/dist/connect/open-url.js.map +1 -0
  37. package/dist/connect/types.d.ts +48 -0
  38. package/dist/connect/types.d.ts.map +1 -0
  39. package/dist/connect/types.js +7 -0
  40. package/dist/connect/types.js.map +1 -0
  41. package/dist/dashboard/index.d.ts +3 -0
  42. package/dist/dashboard/index.d.ts.map +1 -1
  43. package/dist/dashboard/index.js +47 -0
  44. package/dist/dashboard/index.js.map +1 -1
  45. package/dist/dashboard/types.d.ts +1 -1
  46. package/dist/dashboard/types.d.ts.map +1 -1
  47. package/dist/dashboard/views/connect-view.d.ts +25 -0
  48. package/dist/dashboard/views/connect-view.d.ts.map +1 -0
  49. package/dist/dashboard/views/connect-view.js +135 -0
  50. package/dist/dashboard/views/connect-view.js.map +1 -0
  51. package/dist/dashboard/views/main-view.d.ts.map +1 -1
  52. package/dist/dashboard/views/main-view.js +1 -0
  53. package/dist/dashboard/views/main-view.js.map +1 -1
  54. package/dist/desktop/chrome-detector.d.ts +58 -0
  55. package/dist/desktop/chrome-detector.d.ts.map +1 -0
  56. package/dist/desktop/chrome-detector.js +211 -0
  57. package/dist/desktop/chrome-detector.js.map +1 -0
  58. package/dist/desktop/cli-coexistence.d.ts +90 -0
  59. package/dist/desktop/cli-coexistence.d.ts.map +1 -0
  60. package/dist/desktop/cli-coexistence.js +219 -0
  61. package/dist/desktop/cli-coexistence.js.map +1 -0
  62. package/dist/desktop/dashboard-state.d.ts +50 -0
  63. package/dist/desktop/dashboard-state.d.ts.map +1 -0
  64. package/dist/desktop/dashboard-state.js +155 -0
  65. package/dist/desktop/dashboard-state.js.map +1 -0
  66. package/dist/desktop/error-log.d.ts +53 -0
  67. package/dist/desktop/error-log.d.ts.map +1 -0
  68. package/dist/desktop/error-log.js +127 -0
  69. package/dist/desktop/error-log.js.map +1 -0
  70. package/dist/desktop/sidecar-manager.d.ts +80 -0
  71. package/dist/desktop/sidecar-manager.d.ts.map +1 -0
  72. package/dist/desktop/sidecar-manager.js +222 -0
  73. package/dist/desktop/sidecar-manager.js.map +1 -0
  74. package/dist/desktop/tunnel-failure-handler.d.ts +56 -0
  75. package/dist/desktop/tunnel-failure-handler.d.ts.map +1 -0
  76. package/dist/desktop/tunnel-failure-handler.js +157 -0
  77. package/dist/desktop/tunnel-failure-handler.js.map +1 -0
  78. package/dist/desktop/tunnel-manager.d.ts +85 -0
  79. package/dist/desktop/tunnel-manager.d.ts.map +1 -0
  80. package/dist/desktop/tunnel-manager.js +363 -0
  81. package/dist/desktop/tunnel-manager.js.map +1 -0
  82. package/dist/index.js +15 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/mcp-server.d.ts.map +1 -1
  85. package/dist/mcp-server.js +4 -0
  86. package/dist/mcp-server.js.map +1 -1
  87. package/dist/session-manager.d.ts +6 -0
  88. package/dist/session-manager.d.ts.map +1 -1
  89. package/dist/session-manager.js +12 -0
  90. package/dist/session-manager.js.map +1 -1
  91. package/dist/tools/connect.d.ts +7 -0
  92. package/dist/tools/connect.d.ts.map +1 -0
  93. package/dist/tools/connect.js +125 -0
  94. package/dist/tools/connect.js.map +1 -0
  95. package/dist/tools/index.d.ts.map +1 -1
  96. package/dist/tools/index.js +4 -0
  97. package/dist/tools/index.js.map +1 -1
  98. package/dist/tools/navigate.d.ts.map +1 -1
  99. package/dist/tools/navigate.js +15 -6
  100. package/dist/tools/navigate.js.map +1 -1
  101. package/dist/transports/http.d.ts +26 -1
  102. package/dist/transports/http.d.ts.map +1 -1
  103. package/dist/transports/http.js +161 -4
  104. package/dist/transports/http.js.map +1 -1
  105. package/dist/transports/index.d.ts +1 -0
  106. package/dist/transports/index.d.ts.map +1 -1
  107. package/dist/transports/index.js +1 -1
  108. package/dist/transports/index.js.map +1 -1
  109. package/package.json +1 -1
  110. package/dist/tools/click-element.d.ts +0 -8
  111. package/dist/tools/click-element.d.ts.map +0 -1
  112. package/dist/tools/click-element.js +0 -347
  113. package/dist/tools/click-element.js.map +0 -1
  114. package/dist/tools/wait-and-click.d.ts +0 -8
  115. package/dist/tools/wait-and-click.d.ts.map +0 -1
  116. package/dist/tools/wait-and-click.js +0 -208
  117. package/dist/tools/wait-and-click.js.map +0 -1
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * Connect View — Web AI host connection guide panel for the terminal dashboard.
4
+ * Part of #523: Desktop App Web host connection guide.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ConnectView = void 0;
8
+ const ansi_js_1 = require("../ansi.js");
9
+ const index_js_1 = require("../../connect/index.js");
10
+ const HOST_LABELS = {
11
+ claude: 'Claude Web',
12
+ chatgpt: 'ChatGPT',
13
+ gemini: 'Gemini',
14
+ custom: 'Other',
15
+ };
16
+ class ConnectView {
17
+ renderer;
18
+ constructor(renderer) {
19
+ this.renderer = renderer;
20
+ }
21
+ render(data, size) {
22
+ const lines = [];
23
+ const width = size.columns;
24
+ const hostIds = (0, index_js_1.getHostIds)();
25
+ const selectedHost = hostIds[data.selectedIndex] || 'claude';
26
+ const info = (0, index_js_1.generateConnectionInfo)(selectedHost, data.serverState);
27
+ // Header
28
+ lines.push(this.renderHeader(data.version, width));
29
+ // Title
30
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.bold}Connect to Web AI${ansi_js_1.ANSI.reset}`, width));
31
+ lines.push(this.renderer.emptyLine(width));
32
+ // Platform selector
33
+ lines.push(this.renderPlatformSelector(hostIds, data.selectedIndex, width));
34
+ lines.push(this.renderer.emptyLine(width));
35
+ // Connection info
36
+ if (!data.serverState.tunnelUrl && !data.serverState.localUrl) {
37
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.yellow}Server not running. Start the server first.${ansi_js_1.ANSI.reset}`, width));
38
+ }
39
+ else {
40
+ // URL display
41
+ lines.push(this.renderSeparator('SERVER URL', width));
42
+ lines.push(this.renderUrlLine(info, width));
43
+ lines.push(this.renderer.emptyLine(width));
44
+ // Tunnel status
45
+ if (info.tunnelActive) {
46
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.green}● Tunnel active${ansi_js_1.ANSI.reset}`, width));
47
+ }
48
+ else {
49
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.yellow}● Local only${ansi_js_1.ANSI.reset} ${ansi_js_1.ANSI.dim}(start tunnel for web AI access)${ansi_js_1.ANSI.reset}`, width));
50
+ }
51
+ lines.push(this.renderer.emptyLine(width));
52
+ // Bearer token (if set)
53
+ if (info.bearerToken) {
54
+ lines.push(this.renderSeparator('AUTH TOKEN', width));
55
+ const masked = info.bearerToken.slice(0, 8) + '...' + info.bearerToken.slice(-4);
56
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.dim}Bearer ${masked}${ansi_js_1.ANSI.reset}`, width));
57
+ lines.push(this.renderer.emptyLine(width));
58
+ }
59
+ // Settings URL
60
+ if (info.settingsUrl) {
61
+ lines.push(this.renderSeparator('SETTINGS', width));
62
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.blue}${ansi_js_1.ANSI.underline}${(0, ansi_js_1.truncate)(info.settingsUrl, width - 6)}${ansi_js_1.ANSI.reset}`, width));
63
+ lines.push(this.renderer.emptyLine(width));
64
+ }
65
+ // Steps
66
+ lines.push(this.renderSeparator('STEPS', width));
67
+ for (let i = 0; i < info.steps.length; i++) {
68
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.bold}${i + 1}.${ansi_js_1.ANSI.reset} ${info.steps[i]}`, width));
69
+ }
70
+ lines.push(this.renderer.emptyLine(width));
71
+ // Config snippet for custom
72
+ if (selectedHost === 'custom') {
73
+ lines.push(this.renderSeparator('JSON CONFIG', width));
74
+ const snippetLines = info.configSnippet.split('\n');
75
+ for (const sl of snippetLines) {
76
+ lines.push(this.renderer.contentLine(` ${ansi_js_1.ANSI.dim}${(0, ansi_js_1.truncate)(sl, width - 6)}${ansi_js_1.ANSI.reset}`, width));
77
+ }
78
+ }
79
+ }
80
+ // Fill remaining space
81
+ while (lines.length < size.rows - 2) {
82
+ lines.push(this.renderer.emptyLine(width));
83
+ }
84
+ // Key hints
85
+ lines.push(this.renderSeparator('', width));
86
+ lines.push(this.renderKeyHints(width));
87
+ lines.push(this.renderer.footer(width));
88
+ return lines;
89
+ }
90
+ renderHeader(version, width) {
91
+ const title = `CONNECT — OpenChrome v${version}`;
92
+ const leftPart = `${ansi_js_1.ANSI.bold}${ansi_js_1.ANSI.cyan} ${title}${ansi_js_1.ANSI.reset}`;
93
+ const leftLen = title.length + 1;
94
+ const middlePad = Math.max(0, width - leftLen - 2);
95
+ return ansi_js_1.BOX.topLeft + leftPart + ' '.repeat(middlePad) + ansi_js_1.BOX.topRight;
96
+ }
97
+ renderPlatformSelector(hostIds, selectedIndex, width) {
98
+ const parts = [];
99
+ for (let i = 0; i < hostIds.length; i++) {
100
+ const label = HOST_LABELS[hostIds[i]];
101
+ if (i === selectedIndex) {
102
+ parts.push(`${ansi_js_1.ANSI.bgBlue}${ansi_js_1.ANSI.bold}${ansi_js_1.ANSI.white} ${label} ${ansi_js_1.ANSI.reset}`);
103
+ }
104
+ else {
105
+ parts.push(`${ansi_js_1.ANSI.dim} ${label} ${ansi_js_1.ANSI.reset}`);
106
+ }
107
+ }
108
+ const content = ' ' + parts.join(' ');
109
+ return this.renderer.contentLine(content, width);
110
+ }
111
+ renderUrlLine(info, width) {
112
+ const url = (0, ansi_js_1.truncate)(info.serverUrl, width - 8);
113
+ return this.renderer.contentLine(` ${ansi_js_1.ANSI.bold}${ansi_js_1.ANSI.green}${url}${ansi_js_1.ANSI.reset}`, width);
114
+ }
115
+ renderSeparator(title, width) {
116
+ if (!title) {
117
+ return ansi_js_1.BOX.teeRight + (0, ansi_js_1.horizontalLine)(width - 2) + ansi_js_1.BOX.teeLeft;
118
+ }
119
+ const titlePart = ` ${title} `;
120
+ const remaining = width - titlePart.length - 2;
121
+ return ansi_js_1.BOX.teeRight + titlePart + (0, ansi_js_1.horizontalLine)(remaining) + ansi_js_1.BOX.teeLeft;
122
+ }
123
+ renderKeyHints(width) {
124
+ const hints = [
125
+ `${ansi_js_1.ANSI.bold}[←→]${ansi_js_1.ANSI.reset}Platform`,
126
+ `${ansi_js_1.ANSI.bold}[O]${ansi_js_1.ANSI.reset}pen Settings`,
127
+ `${ansi_js_1.ANSI.bold}[Y]${ansi_js_1.ANSI.reset}Copy URL`,
128
+ `${ansi_js_1.ANSI.bold}[Esc]${ansi_js_1.ANSI.reset}Back`,
129
+ `${ansi_js_1.ANSI.bold}[Q]${ansi_js_1.ANSI.reset}uit`,
130
+ ];
131
+ return this.renderer.contentLine(' ' + hints.join(' '), width);
132
+ }
133
+ }
134
+ exports.ConnectView = ConnectView;
135
+ //# sourceMappingURL=connect-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-view.js","sourceRoot":"","sources":["../../../src/dashboard/views/connect-view.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main-view.d.ts","sourceRoot":"","sources":["../../../src/dashboard/views/main-view.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAI9B,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAgCtD,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,cAAc;CAcvB"}
1
+ {"version":3,"file":"main-view.d.ts","sourceRoot":"","sources":["../../../src/dashboard/views/main-view.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAI9B,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAgCtD,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,cAAc;CAevB"}
@@ -133,6 +133,7 @@ class MainView {
133
133
  `${ansi_js_1.ANSI.bold}[S]${ansi_js_1.ANSI.reset}essions`,
134
134
  `${ansi_js_1.ANSI.bold}[T]${ansi_js_1.ANSI.reset}abs`,
135
135
  `${ansi_js_1.ANSI.bold}[C]${ansi_js_1.ANSI.reset}ancel`,
136
+ `${ansi_js_1.ANSI.bold}[W]${ansi_js_1.ANSI.reset}eb Connect`,
136
137
  `${ansi_js_1.ANSI.bold}[Q]${ansi_js_1.ANSI.reset}uit`,
137
138
  ];
138
139
  const content = ' ' + hints.join(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"main-view.js","sourceRoot":"","sources":["../../../src/dashboard/views/main-view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main-view.js","sourceRoot":"","sources":["../../../src/dashboard/views/main-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Chrome Detector — detects Chrome installation for the desktop app UI.
3
+ * Emits events so the UI can prompt the user to install Chrome if missing.
4
+ * Part of #524 Desktop App: Error handling + local fallback + CLI coexistence.
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ export declare const CHROME_DOWNLOAD_URL = "https://www.google.com/chrome/";
8
+ export interface ChromeDetectionResult {
9
+ found: boolean;
10
+ path: string | null;
11
+ platform: NodeJS.Platform;
12
+ /** User-friendly message with no technical jargon */
13
+ message: string;
14
+ /** URL to download Chrome */
15
+ downloadUrl: string;
16
+ }
17
+ export interface ChromeDetectorOptions {
18
+ /** Polling interval in milliseconds. Default: 5000 (5s) */
19
+ intervalMs?: number;
20
+ }
21
+ /**
22
+ * ChromeDetector — event-driven Chrome installation detector.
23
+ *
24
+ * Events:
25
+ * 'detected' — Chrome was found: (result: ChromeDetectionResult)
26
+ * 'not-found' — Chrome is missing: (result: ChromeDetectionResult)
27
+ * 'error' — Unexpected error during detection: (err: Error)
28
+ */
29
+ export declare class ChromeDetector extends EventEmitter {
30
+ private readonly intervalMs;
31
+ private timer;
32
+ constructor(opts?: ChromeDetectorOptions);
33
+ /**
34
+ * Run a one-shot detection and emit the appropriate event.
35
+ */
36
+ detect(): Promise<ChromeDetectionResult>;
37
+ /**
38
+ * Re-run detection — identical to detect() but semantically signals a
39
+ * user-initiated retry after they have (hopefully) installed Chrome.
40
+ */
41
+ retry(): Promise<ChromeDetectionResult>;
42
+ /**
43
+ * Start periodic polling for Chrome.
44
+ * Useful for "install Chrome then click Retry" UX: the app polls in the
45
+ * background and automatically enables the Start button once Chrome appears.
46
+ * The timer is .unref()'d so it does not prevent process exit.
47
+ */
48
+ startPolling(intervalMs?: number): void;
49
+ /**
50
+ * Stop periodic polling.
51
+ */
52
+ stopPolling(): void;
53
+ /**
54
+ * Whether periodic polling is currently active.
55
+ */
56
+ isPolling(): boolean;
57
+ }
58
+ //# sourceMappingURL=chrome-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-detector.d.ts","sourceRoot":"","sources":["../../src/desktop/chrome-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,eAAO,MAAM,mBAAmB,mCAAmC,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmFD;;;;;;;GAOG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,KAAK,CAA+B;gBAEhC,IAAI,CAAC,EAAE,qBAAqB;IAKxC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAkB9C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAI7C;;;;;OAKG;IACH,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAYvC;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * Chrome Detector — detects Chrome installation for the desktop app UI.
4
+ * Emits events so the UI can prompt the user to install Chrome if missing.
5
+ * Part of #524 Desktop App: Error handling + local fallback + CLI coexistence.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.ChromeDetector = exports.CHROME_DOWNLOAD_URL = void 0;
42
+ const events_1 = require("events");
43
+ const fs = __importStar(require("fs"));
44
+ const os = __importStar(require("os"));
45
+ const path = __importStar(require("path"));
46
+ const child_process_1 = require("child_process");
47
+ exports.CHROME_DOWNLOAD_URL = 'https://www.google.com/chrome/';
48
+ /**
49
+ * Find the Chrome executable path for the current platform.
50
+ * Mirrors the detection logic from src/chrome/launcher.ts so both
51
+ * the MCP server and the desktop app use the same set of paths.
52
+ */
53
+ function findChromePath() {
54
+ // Honour explicit override
55
+ const envPath = process.env['CHROME_PATH'];
56
+ if (envPath && fs.existsSync(envPath))
57
+ return envPath;
58
+ const platform = os.platform();
59
+ if (platform === 'win32') {
60
+ const pf86 = process.env['PROGRAMFILES(X86)'];
61
+ const pf = process.env['PROGRAMFILES'];
62
+ const local = process.env['LOCALAPPDATA'];
63
+ const candidates = [];
64
+ if (pf86)
65
+ candidates.push(path.join(pf86, 'Google', 'Chrome', 'Application', 'chrome.exe'));
66
+ if (pf)
67
+ candidates.push(path.join(pf, 'Google', 'Chrome', 'Application', 'chrome.exe'));
68
+ if (local)
69
+ candidates.push(path.join(local, 'Google', 'Chrome', 'Application', 'chrome.exe'));
70
+ for (const p of candidates) {
71
+ if (fs.existsSync(p))
72
+ return p;
73
+ }
74
+ }
75
+ else if (platform === 'darwin') {
76
+ const candidates = [
77
+ '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
78
+ '/Applications/Chromium.app/Contents/MacOS/Chromium',
79
+ ];
80
+ for (const p of candidates) {
81
+ if (fs.existsSync(p))
82
+ return p;
83
+ }
84
+ }
85
+ else {
86
+ // Linux — check explicit paths first (Snap, apt, etc.)
87
+ const linuxPaths = [
88
+ '/usr/bin/google-chrome-stable',
89
+ '/usr/bin/google-chrome',
90
+ '/snap/bin/chromium',
91
+ '/snap/bin/google-chrome',
92
+ ];
93
+ for (const p of linuxPaths) {
94
+ if (fs.existsSync(p))
95
+ return p;
96
+ }
97
+ // Fall back to PATH search (same order as launcher.ts)
98
+ const whichCandidates = ['google-chrome', 'google-chrome-stable', 'chromium-browser', 'chromium'];
99
+ for (const bin of whichCandidates) {
100
+ try {
101
+ const result = (0, child_process_1.execFileSync)('which', [bin], {
102
+ encoding: 'utf8',
103
+ timeout: 5000,
104
+ }).trim();
105
+ if (result)
106
+ return result;
107
+ }
108
+ catch {
109
+ // not found, try next
110
+ }
111
+ }
112
+ }
113
+ return null;
114
+ }
115
+ function buildResult(chromePath) {
116
+ const platform = os.platform();
117
+ if (chromePath) {
118
+ return {
119
+ found: true,
120
+ path: chromePath,
121
+ platform,
122
+ message: 'Chrome is installed and ready to use.',
123
+ downloadUrl: exports.CHROME_DOWNLOAD_URL,
124
+ };
125
+ }
126
+ return {
127
+ found: false,
128
+ path: null,
129
+ platform,
130
+ message: 'Chrome was not found on this computer. Please install Chrome to use this app, then click Retry.',
131
+ downloadUrl: exports.CHROME_DOWNLOAD_URL,
132
+ };
133
+ }
134
+ /**
135
+ * ChromeDetector — event-driven Chrome installation detector.
136
+ *
137
+ * Events:
138
+ * 'detected' — Chrome was found: (result: ChromeDetectionResult)
139
+ * 'not-found' — Chrome is missing: (result: ChromeDetectionResult)
140
+ * 'error' — Unexpected error during detection: (err: Error)
141
+ */
142
+ class ChromeDetector extends events_1.EventEmitter {
143
+ intervalMs;
144
+ timer = null;
145
+ constructor(opts) {
146
+ super();
147
+ this.intervalMs = opts?.intervalMs ?? 5000;
148
+ }
149
+ /**
150
+ * Run a one-shot detection and emit the appropriate event.
151
+ */
152
+ async detect() {
153
+ try {
154
+ const chromePath = findChromePath();
155
+ const result = buildResult(chromePath);
156
+ if (result.found) {
157
+ this.emit('detected', result);
158
+ }
159
+ else {
160
+ this.emit('not-found', result);
161
+ }
162
+ return result;
163
+ }
164
+ catch (err) {
165
+ const error = err instanceof Error ? err : new Error(String(err));
166
+ console.error('[ChromeDetector] Unexpected error during detection:', error);
167
+ this.emit('error', error);
168
+ throw error;
169
+ }
170
+ }
171
+ /**
172
+ * Re-run detection — identical to detect() but semantically signals a
173
+ * user-initiated retry after they have (hopefully) installed Chrome.
174
+ */
175
+ async retry() {
176
+ return this.detect();
177
+ }
178
+ /**
179
+ * Start periodic polling for Chrome.
180
+ * Useful for "install Chrome then click Retry" UX: the app polls in the
181
+ * background and automatically enables the Start button once Chrome appears.
182
+ * The timer is .unref()'d so it does not prevent process exit.
183
+ */
184
+ startPolling(intervalMs) {
185
+ this.stopPolling(); // clear any existing timer
186
+ const ms = intervalMs ?? this.intervalMs;
187
+ this.timer = setInterval(() => {
188
+ this.detect().catch((err) => {
189
+ console.error('[ChromeDetector] Error during polling:', err);
190
+ });
191
+ }, ms);
192
+ this.timer.unref();
193
+ }
194
+ /**
195
+ * Stop periodic polling.
196
+ */
197
+ stopPolling() {
198
+ if (this.timer) {
199
+ clearInterval(this.timer);
200
+ this.timer = null;
201
+ }
202
+ }
203
+ /**
204
+ * Whether periodic polling is currently active.
205
+ */
206
+ isPolling() {
207
+ return this.timer !== null;
208
+ }
209
+ }
210
+ exports.ChromeDetector = ChromeDetector;
211
+ //# sourceMappingURL=chrome-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-detector.js","sourceRoot":"","sources":["../../src/desktop/chrome-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * CLI Coexistence — detects and monitors an existing CLI-spawned server.
3
+ * On app start, checks if a server is already running on the target port.
4
+ * If found, connects to it instead of spawning a new sidecar.
5
+ * Monitors health continuously and emits events on state changes.
6
+ * Part of #524 Desktop App: Error handling + local fallback + CLI coexistence.
7
+ */
8
+ import { EventEmitter } from 'events';
9
+ /**
10
+ * 'none' — no server detected
11
+ * 'external' — external CLI-spawned server detected via health check
12
+ * 'built-in' — reserved for the parent application to set when it starts its own server;
13
+ * CLICoexistence never sets this value itself.
14
+ */
15
+ export type ServerSource = 'none' | 'external' | 'built-in';
16
+ export interface CoexistenceOptions {
17
+ /** Port to check. Default: 3100 */
18
+ port?: number;
19
+ /** Health check path. Default: '/health' */
20
+ healthCheckPath?: string;
21
+ /** Interval between health checks in ms. Default: 5000 */
22
+ healthCheckIntervalMs?: number;
23
+ /** Timeout per health check request in ms. Default: 2000 */
24
+ healthCheckTimeoutMs?: number;
25
+ }
26
+ export interface ServerInfo {
27
+ source: ServerSource;
28
+ port: number;
29
+ healthy: boolean;
30
+ lastHealthCheck: number | null;
31
+ }
32
+ /**
33
+ * Events emitted by CLICoexistence:
34
+ *
35
+ * 'external-detected' → { port: number }
36
+ * A server was found running on the configured port.
37
+ *
38
+ * 'external-lost' → { port: number; message: string }
39
+ * A previously-detected external server stopped responding.
40
+ *
41
+ * 'no-server' → { port: number }
42
+ * Initial check found no server running.
43
+ *
44
+ * 'health-check' → { healthy: boolean; source: ServerSource }
45
+ * Fired after every health check (initial and periodic).
46
+ *
47
+ * 'status-changed' → { oldSource: ServerSource; newSource: ServerSource }
48
+ * Fired when source transitions (none→external or external→none).
49
+ */
50
+ export declare class CLICoexistence extends EventEmitter {
51
+ private readonly port;
52
+ private readonly healthCheckPath;
53
+ private readonly healthCheckIntervalMs;
54
+ private readonly healthCheckTimeoutMs;
55
+ private source;
56
+ private healthy;
57
+ private lastHealthCheck;
58
+ private timer;
59
+ constructor(opts?: CoexistenceOptions);
60
+ /**
61
+ * Perform a single health check against the configured port.
62
+ * Returns a ServerInfo snapshot reflecting the result.
63
+ */
64
+ checkForExistingServer(): Promise<ServerInfo>;
65
+ /**
66
+ * Start periodic health monitoring.
67
+ * Timer is .unref()'d so it does not prevent process exit.
68
+ */
69
+ startMonitoring(): void;
70
+ /**
71
+ * Stop periodic health monitoring.
72
+ */
73
+ stopMonitoring(): void;
74
+ /**
75
+ * Returns a snapshot of the current server info.
76
+ */
77
+ getServerInfo(): ServerInfo;
78
+ /**
79
+ * Whether the monitoring timer is active.
80
+ */
81
+ isMonitoring(): boolean;
82
+ private _monitorTick;
83
+ /**
84
+ * Attempt GET {healthCheckPath} on localhost:{port}.
85
+ * Returns true if a 2xx/3xx response is received within the timeout.
86
+ * Returns false on ECONNREFUSED, ETIMEDOUT, or any error.
87
+ */
88
+ private _httpGet;
89
+ }
90
+ //# sourceMappingURL=cli-coexistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-coexistence.d.ts","sourceRoot":"","sources":["../../src/desktop/cli-coexistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAE9C,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,KAAK,CAA+B;gBAEhC,IAAI,GAAE,kBAAuB;IAQzC;;;OAGG;IACG,sBAAsB,IAAI,OAAO,CAAC,UAAU,CAAC;IAkCnD;;;OAGG;IACH,eAAe,IAAI,IAAI;IAWvB;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;OAEG;IACH,aAAa,IAAI,UAAU;IAS3B;;OAEG;IACH,YAAY,IAAI,OAAO;YAQT,YAAY;IA4B1B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CAiCjB"}