@helmisatria/mcp-chrome-bridge 1.0.30

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 (129) hide show
  1. package/README.md +183 -0
  2. package/dist/README.md +25 -0
  3. package/dist/agent/attachment-service.d.ts +83 -0
  4. package/dist/agent/attachment-service.js +370 -0
  5. package/dist/agent/attachment-service.js.map +1 -0
  6. package/dist/agent/ccr-detector.d.ts +59 -0
  7. package/dist/agent/ccr-detector.js +311 -0
  8. package/dist/agent/ccr-detector.js.map +1 -0
  9. package/dist/agent/chat-service.d.ts +50 -0
  10. package/dist/agent/chat-service.js +439 -0
  11. package/dist/agent/chat-service.js.map +1 -0
  12. package/dist/agent/db/client.d.ts +26 -0
  13. package/dist/agent/db/client.js +244 -0
  14. package/dist/agent/db/client.js.map +1 -0
  15. package/dist/agent/db/index.d.ts +5 -0
  16. package/dist/agent/db/index.js +22 -0
  17. package/dist/agent/db/index.js.map +1 -0
  18. package/dist/agent/db/schema.d.ts +711 -0
  19. package/dist/agent/db/schema.js +121 -0
  20. package/dist/agent/db/schema.js.map +1 -0
  21. package/dist/agent/directory-picker.d.ts +11 -0
  22. package/dist/agent/directory-picker.js +149 -0
  23. package/dist/agent/directory-picker.js.map +1 -0
  24. package/dist/agent/engines/claude.d.ts +79 -0
  25. package/dist/agent/engines/claude.js +1338 -0
  26. package/dist/agent/engines/claude.js.map +1 -0
  27. package/dist/agent/engines/codex.d.ts +48 -0
  28. package/dist/agent/engines/codex.js +822 -0
  29. package/dist/agent/engines/codex.js.map +1 -0
  30. package/dist/agent/engines/types.d.ts +133 -0
  31. package/dist/agent/engines/types.js +3 -0
  32. package/dist/agent/engines/types.js.map +1 -0
  33. package/dist/agent/message-service.d.ts +56 -0
  34. package/dist/agent/message-service.js +198 -0
  35. package/dist/agent/message-service.js.map +1 -0
  36. package/dist/agent/open-project.d.ts +25 -0
  37. package/dist/agent/open-project.js +469 -0
  38. package/dist/agent/open-project.js.map +1 -0
  39. package/dist/agent/project-service.d.ts +49 -0
  40. package/dist/agent/project-service.js +254 -0
  41. package/dist/agent/project-service.js.map +1 -0
  42. package/dist/agent/project-types.d.ts +27 -0
  43. package/dist/agent/project-types.js +3 -0
  44. package/dist/agent/project-types.js.map +1 -0
  45. package/dist/agent/session-service.d.ts +198 -0
  46. package/dist/agent/session-service.js +292 -0
  47. package/dist/agent/session-service.js.map +1 -0
  48. package/dist/agent/storage.d.ts +27 -0
  49. package/dist/agent/storage.js +73 -0
  50. package/dist/agent/storage.js.map +1 -0
  51. package/dist/agent/stream-manager.d.ts +42 -0
  52. package/dist/agent/stream-manager.js +243 -0
  53. package/dist/agent/stream-manager.js.map +1 -0
  54. package/dist/agent/tool-bridge.d.ts +44 -0
  55. package/dist/agent/tool-bridge.js +50 -0
  56. package/dist/agent/tool-bridge.js.map +1 -0
  57. package/dist/agent/types.d.ts +6 -0
  58. package/dist/agent/types.js +3 -0
  59. package/dist/agent/types.js.map +1 -0
  60. package/dist/cli.d.ts +2 -0
  61. package/dist/cli.js +224 -0
  62. package/dist/cli.js.map +1 -0
  63. package/dist/constant/index.d.ts +60 -0
  64. package/dist/constant/index.js +80 -0
  65. package/dist/constant/index.js.map +1 -0
  66. package/dist/file-handler.d.ts +41 -0
  67. package/dist/file-handler.js +295 -0
  68. package/dist/file-handler.js.map +1 -0
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.js +35 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/mcp/mcp-server-stdio.d.ts +72 -0
  73. package/dist/mcp/mcp-server-stdio.js +143 -0
  74. package/dist/mcp/mcp-server-stdio.js.map +1 -0
  75. package/dist/mcp/mcp-server.d.ts +36 -0
  76. package/dist/mcp/mcp-server.js +26 -0
  77. package/dist/mcp/mcp-server.js.map +1 -0
  78. package/dist/mcp/register-tools.d.ts +2 -0
  79. package/dist/mcp/register-tools.js +148 -0
  80. package/dist/mcp/register-tools.js.map +1 -0
  81. package/dist/mcp/stdio-config.json +3 -0
  82. package/dist/native-messaging-host.d.ts +42 -0
  83. package/dist/native-messaging-host.js +312 -0
  84. package/dist/native-messaging-host.js.map +1 -0
  85. package/dist/run_host.bat +194 -0
  86. package/dist/run_host.sh +264 -0
  87. package/dist/scripts/browser-config.d.ts +28 -0
  88. package/dist/scripts/browser-config.js +229 -0
  89. package/dist/scripts/browser-config.js.map +1 -0
  90. package/dist/scripts/build.d.ts +1 -0
  91. package/dist/scripts/build.js +126 -0
  92. package/dist/scripts/build.js.map +1 -0
  93. package/dist/scripts/constant.d.ts +4 -0
  94. package/dist/scripts/constant.js +8 -0
  95. package/dist/scripts/constant.js.map +1 -0
  96. package/dist/scripts/doctor.d.ts +70 -0
  97. package/dist/scripts/doctor.js +930 -0
  98. package/dist/scripts/doctor.js.map +1 -0
  99. package/dist/scripts/postinstall.d.ts +2 -0
  100. package/dist/scripts/postinstall.js +246 -0
  101. package/dist/scripts/postinstall.js.map +1 -0
  102. package/dist/scripts/register-dev.d.ts +1 -0
  103. package/dist/scripts/register-dev.js +5 -0
  104. package/dist/scripts/register-dev.js.map +1 -0
  105. package/dist/scripts/register.d.ts +2 -0
  106. package/dist/scripts/register.js +28 -0
  107. package/dist/scripts/register.js.map +1 -0
  108. package/dist/scripts/report.d.ts +96 -0
  109. package/dist/scripts/report.js +686 -0
  110. package/dist/scripts/report.js.map +1 -0
  111. package/dist/scripts/utils.d.ts +64 -0
  112. package/dist/scripts/utils.js +443 -0
  113. package/dist/scripts/utils.js.map +1 -0
  114. package/dist/server/index.d.ts +35 -0
  115. package/dist/server/index.js +312 -0
  116. package/dist/server/index.js.map +1 -0
  117. package/dist/server/routes/agent.d.ts +21 -0
  118. package/dist/server/routes/agent.js +971 -0
  119. package/dist/server/routes/agent.js.map +1 -0
  120. package/dist/server/routes/index.d.ts +4 -0
  121. package/dist/server/routes/index.js +9 -0
  122. package/dist/server/routes/index.js.map +1 -0
  123. package/dist/trace-analyzer.d.ts +14 -0
  124. package/dist/trace-analyzer.js +113 -0
  125. package/dist/trace-analyzer.js.map +1 -0
  126. package/dist/util/logger.d.ts +1 -0
  127. package/dist/util/logger.js +43 -0
  128. package/dist/util/logger.js.map +1 -0
  129. package/package.json +91 -0
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Configuration
4
+ ENABLE_LOG_ROTATION="true"
5
+ LOG_RETENTION_COUNT=5
6
+
7
+ # Setup paths
8
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
9
+ NODE_SCRIPT="${SCRIPT_DIR}/index.js"
10
+
11
+ # Setup log directory - prefer user-writable locations
12
+ # macOS: ~/Library/Logs/mcp-chrome-bridge
13
+ # Linux: $XDG_STATE_HOME/mcp-chrome-bridge/logs or ~/.local/state/mcp-chrome-bridge/logs
14
+ if [ "$(uname)" = "Darwin" ]; then
15
+ LOG_DIR="${HOME}/Library/Logs/mcp-chrome-bridge"
16
+ else
17
+ LOG_DIR="${XDG_STATE_HOME:-${HOME}/.local/state}/mcp-chrome-bridge/logs"
18
+ fi
19
+
20
+ # Fallback: if user directory is not writable, use package directory
21
+ if ! mkdir -p "${LOG_DIR}" 2>/dev/null; then
22
+ LOG_DIR="${SCRIPT_DIR}/logs"
23
+ mkdir -p "${LOG_DIR}" 2>/dev/null || true
24
+ fi
25
+
26
+ # Log rotation
27
+ if [ "${ENABLE_LOG_ROTATION}" = "true" ]; then
28
+ # Clean up old logs (both legacy _macos_ and new _unix_ naming)
29
+ ls -tp "${LOG_DIR}/native_host_wrapper_"* 2>/dev/null | tail -n +$((LOG_RETENTION_COUNT + 1)) | xargs -I {} rm -- {}
30
+ ls -tp "${LOG_DIR}/native_host_stderr_"* 2>/dev/null | tail -n +$((LOG_RETENTION_COUNT + 1)) | xargs -I {} rm -- {}
31
+ fi
32
+
33
+ # Logging setup
34
+ TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
35
+ WRAPPER_LOG="${LOG_DIR}/native_host_wrapper_unix_${TIMESTAMP}.log"
36
+ STDERR_LOG="${LOG_DIR}/native_host_stderr_unix_${TIMESTAMP}.log"
37
+
38
+ # Initial logging
39
+ {
40
+ echo "--- Wrapper script called at $(date) ---"
41
+ echo "SCRIPT_DIR: ${SCRIPT_DIR}"
42
+ echo "LOG_DIR: ${LOG_DIR}"
43
+ echo "NODE_SCRIPT: ${NODE_SCRIPT}"
44
+ echo "Initial PATH: ${PATH}"
45
+ echo "CHROME_MCP_NODE_PATH: ${CHROME_MCP_NODE_PATH:-<unset>}"
46
+ echo "VOLTA_HOME: ${VOLTA_HOME:-<unset>}"
47
+ echo "ASDF_DATA_DIR: ${ASDF_DATA_DIR:-<unset>}"
48
+ echo "FNM_DIR: ${FNM_DIR:-<unset>}"
49
+ echo "NVM_DIR: ${NVM_DIR:-<unset>}"
50
+ echo "User: $(whoami)"
51
+ echo "Current PWD: $(pwd)"
52
+ } > "${WRAPPER_LOG}"
53
+
54
+ # Node.js discovery
55
+ NODE_EXEC=""
56
+ NODE_EXEC_SOURCE=""
57
+ NODE_PATH_FILE="${SCRIPT_DIR}/node_path.txt"
58
+
59
+ echo "Searching for Node.js..." >> "${WRAPPER_LOG}"
60
+
61
+ # Priority 0: CHROME_MCP_NODE_PATH environment variable override
62
+ echo "[Priority 0] Checking CHROME_MCP_NODE_PATH override" >> "${WRAPPER_LOG}"
63
+ if [ -n "${CHROME_MCP_NODE_PATH:-}" ]; then
64
+ CANDIDATE_NODE="${CHROME_MCP_NODE_PATH}"
65
+ # Expand tilde
66
+ if [[ "${CANDIDATE_NODE}" == "~/"* ]]; then
67
+ CANDIDATE_NODE="${HOME}/${CANDIDATE_NODE#~/}"
68
+ fi
69
+ # If directory, append /node
70
+ if [ -d "${CANDIDATE_NODE}" ]; then
71
+ CANDIDATE_NODE="${CANDIDATE_NODE%/}/node"
72
+ fi
73
+ if [ -x "${CANDIDATE_NODE}" ]; then
74
+ NODE_EXEC="${CANDIDATE_NODE}"
75
+ NODE_EXEC_SOURCE="CHROME_MCP_NODE_PATH"
76
+ echo "Found node via CHROME_MCP_NODE_PATH: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
77
+ else
78
+ echo "CHROME_MCP_NODE_PATH is set but not executable: ${CANDIDATE_NODE}" >> "${WRAPPER_LOG}"
79
+ fi
80
+ fi
81
+
82
+ # Priority 1: Installation-time node path
83
+ echo "[Priority 1] Checking installation-time node path" >> "${WRAPPER_LOG}"
84
+ if [ -z "${NODE_EXEC}" ] && [ -f "${NODE_PATH_FILE}" ]; then
85
+ EXPECTED_NODE=$(cat "${NODE_PATH_FILE}" 2>/dev/null | tr -d '\n\r')
86
+ if [ -n "${EXPECTED_NODE}" ] && [ -x "${EXPECTED_NODE}" ]; then
87
+ NODE_EXEC="${EXPECTED_NODE}"
88
+ NODE_EXEC_SOURCE="node_path.txt"
89
+ echo "Found installation-time node at ${NODE_EXEC}" >> "${WRAPPER_LOG}"
90
+ else
91
+ echo "node_path.txt exists but path invalid or not executable: ${EXPECTED_NODE}" >> "${WRAPPER_LOG}"
92
+ fi
93
+ fi
94
+
95
+ # Priority 1.5: Fallback to relative path
96
+ if [ -z "${NODE_EXEC}" ]; then
97
+ EXPECTED_NODE="${SCRIPT_DIR}/../../../bin/node"
98
+ echo "[Priority 1.5] Checking relative path" >> "${WRAPPER_LOG}"
99
+ if [ -x "${EXPECTED_NODE}" ]; then
100
+ NODE_EXEC="${EXPECTED_NODE}"
101
+ NODE_EXEC_SOURCE="relative"
102
+ echo "Found node at relative path: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
103
+ fi
104
+ fi
105
+
106
+ # Priority 2: Volta
107
+ if [ -z "${NODE_EXEC}" ]; then
108
+ echo "[Priority 2] Checking Volta" >> "${WRAPPER_LOG}"
109
+ VOLTA_HOME_CANDIDATE="${VOLTA_HOME:-$HOME/.volta}"
110
+ VOLTA_NODE="${VOLTA_HOME_CANDIDATE}/bin/node"
111
+ if [ -x "${VOLTA_NODE}" ]; then
112
+ NODE_EXEC="${VOLTA_NODE}"
113
+ NODE_EXEC_SOURCE="volta"
114
+ echo "Found Volta node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
115
+ fi
116
+ fi
117
+
118
+ # Priority 3: asdf
119
+ if [ -z "${NODE_EXEC}" ]; then
120
+ echo "[Priority 3] Checking asdf" >> "${WRAPPER_LOG}"
121
+ ASDF_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
122
+ ASDF_NODEJS_DIR="${ASDF_DIR}/installs/nodejs"
123
+ if [ -d "${ASDF_NODEJS_DIR}" ]; then
124
+ # Find the latest version directory
125
+ LATEST_ASDF_NODE_DIR=$(ls -1d "${ASDF_NODEJS_DIR}/"* 2>/dev/null | sort -V | tail -n 1)
126
+ if [ -n "${LATEST_ASDF_NODE_DIR}" ] && [ -x "${LATEST_ASDF_NODE_DIR}/bin/node" ]; then
127
+ NODE_EXEC="${LATEST_ASDF_NODE_DIR}/bin/node"
128
+ NODE_EXEC_SOURCE="asdf"
129
+ echo "Found asdf node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
130
+ fi
131
+ fi
132
+ fi
133
+
134
+ # Priority 4: fnm
135
+ if [ -z "${NODE_EXEC}" ]; then
136
+ echo "[Priority 4] Checking fnm" >> "${WRAPPER_LOG}"
137
+ FNM_HOME_CANDIDATE="${FNM_DIR:-$HOME/.fnm}"
138
+ FNM_NODE_VERSIONS_DIR="${FNM_HOME_CANDIDATE}/node-versions"
139
+ if [ -d "${FNM_NODE_VERSIONS_DIR}" ]; then
140
+ # Find the latest version directory
141
+ LATEST_FNM_NODE_DIR=$(ls -1d "${FNM_NODE_VERSIONS_DIR}/"* 2>/dev/null | sort -V | tail -n 1)
142
+ if [ -n "${LATEST_FNM_NODE_DIR}" ] && [ -x "${LATEST_FNM_NODE_DIR}/installation/bin/node" ]; then
143
+ NODE_EXEC="${LATEST_FNM_NODE_DIR}/installation/bin/node"
144
+ NODE_EXEC_SOURCE="fnm"
145
+ echo "Found fnm node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
146
+ fi
147
+ fi
148
+ fi
149
+
150
+ # Priority 5: NVM
151
+ if [ -z "${NODE_EXEC}" ]; then
152
+ echo "[Priority 5] Checking NVM" >> "${WRAPPER_LOG}"
153
+ NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
154
+ if [ -d "${NVM_DIR}" ]; then
155
+ # Try default version first (check both symlink and file)
156
+ NVM_DEFAULT_ALIAS="${NVM_DIR}/alias/default"
157
+ if [ -e "${NVM_DEFAULT_ALIAS}" ]; then
158
+ if [ -L "${NVM_DEFAULT_ALIAS}" ]; then
159
+ NVM_DEFAULT_VERSION=$(readlink "${NVM_DEFAULT_ALIAS}")
160
+ else
161
+ NVM_DEFAULT_VERSION=$(cat "${NVM_DEFAULT_ALIAS}" 2>/dev/null | tr -d '\n\r')
162
+ fi
163
+ NVM_DEFAULT_NODE="${NVM_DIR}/versions/node/${NVM_DEFAULT_VERSION}/bin/node"
164
+ if [ -x "${NVM_DEFAULT_NODE}" ]; then
165
+ NODE_EXEC="${NVM_DEFAULT_NODE}"
166
+ NODE_EXEC_SOURCE="nvm-default"
167
+ echo "Found NVM default node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
168
+ fi
169
+ fi
170
+
171
+ # Fallback to latest version
172
+ if [ -z "${NODE_EXEC}" ]; then
173
+ LATEST_NVM_VERSION_PATH=$(ls -d "${NVM_DIR}"/versions/node/v* 2>/dev/null | sort -V | tail -n 1)
174
+ if [ -n "${LATEST_NVM_VERSION_PATH}" ] && [ -x "${LATEST_NVM_VERSION_PATH}/bin/node" ]; then
175
+ NODE_EXEC="${LATEST_NVM_VERSION_PATH}/bin/node"
176
+ NODE_EXEC_SOURCE="nvm-latest"
177
+ echo "Found NVM latest node: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
178
+ fi
179
+ fi
180
+ fi
181
+ fi
182
+
183
+ # Priority 6: Common paths
184
+ if [ -z "${NODE_EXEC}" ]; then
185
+ echo "[Priority 6] Checking common paths" >> "${WRAPPER_LOG}"
186
+ COMMON_NODE_PATHS=(
187
+ "/opt/homebrew/bin/node"
188
+ "/usr/local/bin/node"
189
+ "/usr/bin/node"
190
+ )
191
+ for path_to_node in "${COMMON_NODE_PATHS[@]}"; do
192
+ if [ -x "${path_to_node}" ]; then
193
+ NODE_EXEC="${path_to_node}"
194
+ NODE_EXEC_SOURCE="common"
195
+ echo "Found node at: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
196
+ break
197
+ fi
198
+ done
199
+ fi
200
+
201
+ # Priority 7: command -v
202
+ if [ -z "${NODE_EXEC}" ]; then
203
+ echo "[Priority 7] Trying 'command -v node'" >> "${WRAPPER_LOG}"
204
+ if command -v node &>/dev/null; then
205
+ NODE_EXEC=$(command -v node)
206
+ NODE_EXEC_SOURCE="command -v"
207
+ echo "Found node using 'command -v': ${NODE_EXEC}" >> "${WRAPPER_LOG}"
208
+ fi
209
+ fi
210
+
211
+ # Priority 8: PATH search
212
+ if [ -z "${NODE_EXEC}" ]; then
213
+ echo "[Priority 8] Searching PATH" >> "${WRAPPER_LOG}"
214
+ OLD_IFS=$IFS
215
+ IFS=:
216
+ for path_in_env in $PATH; do
217
+ if [ -x "${path_in_env}/node" ]; then
218
+ NODE_EXEC="${path_in_env}/node"
219
+ NODE_EXEC_SOURCE="PATH"
220
+ echo "Found node in PATH: ${NODE_EXEC}" >> "${WRAPPER_LOG}"
221
+ break
222
+ fi
223
+ done
224
+ IFS=$OLD_IFS
225
+ fi
226
+
227
+ # Execution
228
+ if [ -z "${NODE_EXEC}" ]; then
229
+ {
230
+ echo "ERROR: Node.js executable not found!"
231
+ echo "Searched: CHROME_MCP_NODE_PATH, node_path.txt, relative path, Volta, asdf, fnm, NVM, common paths, command -v, PATH"
232
+ echo "To fix: Set CHROME_MCP_NODE_PATH environment variable or run 'mcp-chrome-bridge doctor --fix'"
233
+ } >> "${WRAPPER_LOG}"
234
+ exit 1
235
+ fi
236
+
237
+ if [ ! -f "${NODE_SCRIPT}" ]; then
238
+ echo "ERROR: Node.js script not found at ${NODE_SCRIPT}" >> "${WRAPPER_LOG}"
239
+ exit 1
240
+ fi
241
+
242
+ {
243
+ echo "Using Node executable: ${NODE_EXEC}"
244
+ echo "Node discovery source: ${NODE_EXEC_SOURCE:-unknown}"
245
+ echo "Node version: $(${NODE_EXEC} -v)"
246
+ echo "Executing: ${NODE_EXEC} ${NODE_SCRIPT}"
247
+ } >> "${WRAPPER_LOG}"
248
+
249
+ # Add Node.js bin directory to PATH so child processes can find node and related tools
250
+ NODE_BIN_DIR="$(dirname "${NODE_EXEC}")"
251
+ # Use ${PATH:+:${PATH}} to avoid trailing colon when PATH is empty (security concern)
252
+ export PATH="${NODE_BIN_DIR}${PATH:+:${PATH}}"
253
+ echo "Added ${NODE_BIN_DIR} to PATH" >> "${WRAPPER_LOG}"
254
+
255
+ # Log Claude Code Router (CCR) related env vars for debugging
256
+ # These are set by `eval "$(ccr activate)"` or in shell profile
257
+ if [ -n "${ANTHROPIC_BASE_URL:-}" ]; then
258
+ echo "ANTHROPIC_BASE_URL is set: ${ANTHROPIC_BASE_URL}" >> "${WRAPPER_LOG}"
259
+ fi
260
+ if [ -n "${ANTHROPIC_AUTH_TOKEN:-}" ]; then
261
+ echo "ANTHROPIC_AUTH_TOKEN is set (value hidden)" >> "${WRAPPER_LOG}"
262
+ fi
263
+
264
+ exec "${NODE_EXEC}" "${NODE_SCRIPT}" 2>> "${STDERR_LOG}"
@@ -0,0 +1,28 @@
1
+ export declare enum BrowserType {
2
+ CHROME = "chrome",
3
+ CHROMIUM = "chromium"
4
+ }
5
+ export interface BrowserConfig {
6
+ type: BrowserType;
7
+ displayName: string;
8
+ userManifestPath: string;
9
+ systemManifestPath: string;
10
+ registryKey?: string;
11
+ systemRegistryKey?: string;
12
+ }
13
+ /**
14
+ * Get browser configuration
15
+ */
16
+ export declare function getBrowserConfig(browser: BrowserType): BrowserConfig;
17
+ /**
18
+ * Detect installed browsers on the system
19
+ */
20
+ export declare function detectInstalledBrowsers(): BrowserType[];
21
+ /**
22
+ * Get all supported browser configs
23
+ */
24
+ export declare function getAllBrowserConfigs(): BrowserConfig[];
25
+ /**
26
+ * Parse browser type from string
27
+ */
28
+ export declare function parseBrowserType(browserStr: string): BrowserType | undefined;
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BrowserType = void 0;
37
+ exports.getBrowserConfig = getBrowserConfig;
38
+ exports.detectInstalledBrowsers = detectInstalledBrowsers;
39
+ exports.getAllBrowserConfigs = getAllBrowserConfigs;
40
+ exports.parseBrowserType = parseBrowserType;
41
+ const fs = __importStar(require("fs"));
42
+ const os = __importStar(require("os"));
43
+ const path = __importStar(require("path"));
44
+ const child_process_1 = require("child_process");
45
+ const constant_1 = require("./constant");
46
+ var BrowserType;
47
+ (function (BrowserType) {
48
+ BrowserType["CHROME"] = "chrome";
49
+ BrowserType["CHROMIUM"] = "chromium";
50
+ })(BrowserType || (exports.BrowserType = BrowserType = {}));
51
+ /**
52
+ * Get the user-level manifest path for a specific browser
53
+ */
54
+ function getUserManifestPathForBrowser(browser) {
55
+ const platform = os.platform();
56
+ if (platform === 'win32') {
57
+ const appData = process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming');
58
+ switch (browser) {
59
+ case BrowserType.CHROME:
60
+ return path.join(appData, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
61
+ case BrowserType.CHROMIUM:
62
+ return path.join(appData, 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
63
+ default:
64
+ return path.join(appData, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
65
+ }
66
+ }
67
+ else if (platform === 'darwin') {
68
+ const home = os.homedir();
69
+ switch (browser) {
70
+ case BrowserType.CHROME:
71
+ return path.join(home, 'Library', 'Application Support', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
72
+ case BrowserType.CHROMIUM:
73
+ return path.join(home, 'Library', 'Application Support', 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
74
+ default:
75
+ return path.join(home, 'Library', 'Application Support', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
76
+ }
77
+ }
78
+ else {
79
+ // Linux
80
+ const home = os.homedir();
81
+ switch (browser) {
82
+ case BrowserType.CHROME:
83
+ return path.join(home, '.config', 'google-chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
84
+ case BrowserType.CHROMIUM:
85
+ return path.join(home, '.config', 'chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
86
+ default:
87
+ return path.join(home, '.config', 'google-chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Get the system-level manifest path for a specific browser
93
+ */
94
+ function getSystemManifestPathForBrowser(browser) {
95
+ const platform = os.platform();
96
+ if (platform === 'win32') {
97
+ const programFiles = process.env.ProgramFiles || 'C:\\Program Files';
98
+ switch (browser) {
99
+ case BrowserType.CHROME:
100
+ return path.join(programFiles, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
101
+ case BrowserType.CHROMIUM:
102
+ return path.join(programFiles, 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
103
+ default:
104
+ return path.join(programFiles, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
105
+ }
106
+ }
107
+ else if (platform === 'darwin') {
108
+ switch (browser) {
109
+ case BrowserType.CHROME:
110
+ return path.join('/Library', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
111
+ case BrowserType.CHROMIUM:
112
+ return path.join('/Library', 'Application Support', 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
113
+ default:
114
+ return path.join('/Library', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
115
+ }
116
+ }
117
+ else {
118
+ // Linux
119
+ switch (browser) {
120
+ case BrowserType.CHROME:
121
+ return path.join('/etc', 'opt', 'chrome', 'native-messaging-hosts', `${constant_1.HOST_NAME}.json`);
122
+ case BrowserType.CHROMIUM:
123
+ return path.join('/etc', 'chromium', 'native-messaging-hosts', `${constant_1.HOST_NAME}.json`);
124
+ default:
125
+ return path.join('/etc', 'opt', 'chrome', 'native-messaging-hosts', `${constant_1.HOST_NAME}.json`);
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Get Windows registry keys for a browser
131
+ */
132
+ function getRegistryKeys(browser) {
133
+ if (os.platform() !== 'win32')
134
+ return undefined;
135
+ const browserPaths = {
136
+ [BrowserType.CHROME]: {
137
+ user: `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
138
+ system: `HKLM\\Software\\Google\\Chrome\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
139
+ },
140
+ [BrowserType.CHROMIUM]: {
141
+ user: `HKCU\\Software\\Chromium\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
142
+ system: `HKLM\\Software\\Chromium\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
143
+ },
144
+ };
145
+ return browserPaths[browser];
146
+ }
147
+ /**
148
+ * Get browser configuration
149
+ */
150
+ function getBrowserConfig(browser) {
151
+ const registryKeys = getRegistryKeys(browser);
152
+ return {
153
+ type: browser,
154
+ displayName: browser.charAt(0).toUpperCase() + browser.slice(1),
155
+ userManifestPath: getUserManifestPathForBrowser(browser),
156
+ systemManifestPath: getSystemManifestPathForBrowser(browser),
157
+ registryKey: registryKeys === null || registryKeys === void 0 ? void 0 : registryKeys.user,
158
+ systemRegistryKey: registryKeys === null || registryKeys === void 0 ? void 0 : registryKeys.system,
159
+ };
160
+ }
161
+ /**
162
+ * Detect installed browsers on the system
163
+ */
164
+ function detectInstalledBrowsers() {
165
+ const detectedBrowsers = [];
166
+ const platform = os.platform();
167
+ if (platform === 'win32') {
168
+ // Check Windows registry for installed browsers
169
+ const browsers = [
170
+ { type: BrowserType.CHROME, registryPath: 'HKLM\\SOFTWARE\\Google\\Chrome' },
171
+ { type: BrowserType.CHROMIUM, registryPath: 'HKLM\\SOFTWARE\\Chromium' },
172
+ ];
173
+ for (const browser of browsers) {
174
+ try {
175
+ (0, child_process_1.execSync)(`reg query "${browser.registryPath}" 2>nul`, { stdio: 'pipe' });
176
+ detectedBrowsers.push(browser.type);
177
+ }
178
+ catch (_a) {
179
+ // Browser not installed
180
+ }
181
+ }
182
+ }
183
+ else if (platform === 'darwin') {
184
+ // Check macOS Applications folder
185
+ const browsers = [
186
+ { type: BrowserType.CHROME, appPath: '/Applications/Google Chrome.app' },
187
+ { type: BrowserType.CHROMIUM, appPath: '/Applications/Chromium.app' },
188
+ ];
189
+ for (const browser of browsers) {
190
+ if (fs.existsSync(browser.appPath)) {
191
+ detectedBrowsers.push(browser.type);
192
+ }
193
+ }
194
+ }
195
+ else {
196
+ // Check Linux paths using which command
197
+ const browsers = [
198
+ { type: BrowserType.CHROME, commands: ['google-chrome', 'google-chrome-stable'] },
199
+ { type: BrowserType.CHROMIUM, commands: ['chromium', 'chromium-browser'] },
200
+ ];
201
+ for (const browser of browsers) {
202
+ for (const cmd of browser.commands) {
203
+ try {
204
+ (0, child_process_1.execSync)(`which ${cmd} 2>/dev/null`, { stdio: 'pipe' });
205
+ detectedBrowsers.push(browser.type);
206
+ break; // Found one command, no need to check others
207
+ }
208
+ catch (_b) {
209
+ // Command not found
210
+ }
211
+ }
212
+ }
213
+ }
214
+ return detectedBrowsers;
215
+ }
216
+ /**
217
+ * Get all supported browser configs
218
+ */
219
+ function getAllBrowserConfigs() {
220
+ return Object.values(BrowserType).map((browser) => getBrowserConfig(browser));
221
+ }
222
+ /**
223
+ * Parse browser type from string
224
+ */
225
+ function parseBrowserType(browserStr) {
226
+ const normalized = browserStr.toLowerCase();
227
+ return Object.values(BrowserType).find((type) => type === normalized);
228
+ }
229
+ //# sourceMappingURL=browser-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-config.js","sourceRoot":"","sources":["../../src/scripts/browser-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0LA,4CAWC;AAKD,0DAoDC;AAKD,oDAEC;AAKD,4CAGC;AA7QD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAyC;AACzC,yCAAuC;AAEvC,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;AACvB,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAWD;;GAEG;AACH,SAAS,6BAA6B,CAAC,OAAoB;IACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACrF,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;YAC7F,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;YACrF;gBACE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;YACJ,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;YACJ;gBACE,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;QACN,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ;QACR,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,EACJ,SAAS,EACT,eAAe,EACf,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;YACJ,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;YAC7F;gBACE,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,EACJ,SAAS,EACT,eAAe,EACf,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;QACN,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,+BAA+B,CAAC,OAAoB;IAC3D,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,mBAAmB,CAAC;QACrE,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,CACd,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;YACJ,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;YAC1F;gBACE,OAAO,IAAI,CAAC,IAAI,CACd,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;QACN,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,CACd,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;YACJ,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,IAAI,CAAC,IAAI,CACd,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;YACJ;gBACE,OAAO,IAAI,CAAC,IAAI,CACd,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,GAAG,oBAAS,OAAO,CACpB,CAAC;QACN,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ;QACR,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC,MAAM;gBACrB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;YAC3F,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;YACtF;gBACE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,GAAG,oBAAS,OAAO,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAoB;IAC3C,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAEhD,MAAM,YAAY,GAA0D;QAC1E,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YACpB,IAAI,EAAE,yDAAyD,oBAAS,EAAE;YAC1E,MAAM,EAAE,yDAAyD,oBAAS,EAAE;SAC7E;QACD,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;YACtB,IAAI,EAAE,mDAAmD,oBAAS,EAAE;YACpE,MAAM,EAAE,mDAAmD,oBAAS,EAAE;SACvE;KACF,CAAC;IAEF,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,OAAoB;IACnD,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,gBAAgB,EAAE,6BAA6B,CAAC,OAAO,CAAC;QACxD,kBAAkB,EAAE,+BAA+B,CAAC,OAAO,CAAC;QAC5D,WAAW,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI;QAC/B,iBAAiB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,MAAM,gBAAgB,GAAkB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,gDAAgD;QAChD,MAAM,QAAQ,GAAuD;YACnE,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,gCAAgC,EAAE;YAC5E,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,0BAA0B,EAAE;SACzE,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,cAAc,OAAO,CAAC,YAAY,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;YAAC,WAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,kCAAkC;QAClC,MAAM,QAAQ,GAAkD;YAC9D,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE;YACxE,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,4BAA4B,EAAE;SACtE,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wCAAwC;QACxC,MAAM,QAAQ,GAAqD;YACjE,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,EAAE;YACjF,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;SAC3E,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,SAAS,GAAG,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACxD,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACpC,MAAM,CAAC,6CAA6C;gBACtD,CAAC;gBAAC,WAAM,CAAC;oBACP,oBAAoB;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const child_process_1 = require("child_process");
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const distDir = path_1.default.join(__dirname, '..', '..', 'dist');
10
+ // 清理上次构建
11
+ console.log('清理上次构建...');
12
+ try {
13
+ fs_1.default.rmSync(distDir, { recursive: true, force: true });
14
+ }
15
+ catch (err) {
16
+ // 忽略目录不存在的错误
17
+ console.log(err);
18
+ }
19
+ // 创建dist目录
20
+ fs_1.default.mkdirSync(distDir, { recursive: true });
21
+ fs_1.default.mkdirSync(path_1.default.join(distDir, 'logs'), { recursive: true }); // 创建logs目录
22
+ console.log('dist 和 dist/logs 目录已创建/确认存在');
23
+ // 编译TypeScript
24
+ console.log('编译TypeScript...');
25
+ (0, child_process_1.execSync)('tsc', { stdio: 'inherit' });
26
+ // 复制配置文件
27
+ console.log('复制配置文件...');
28
+ const configSourcePath = path_1.default.join(__dirname, '..', 'mcp', 'stdio-config.json');
29
+ const configDestPath = path_1.default.join(distDir, 'mcp', 'stdio-config.json');
30
+ try {
31
+ // 确保目标目录存在
32
+ fs_1.default.mkdirSync(path_1.default.dirname(configDestPath), { recursive: true });
33
+ if (fs_1.default.existsSync(configSourcePath)) {
34
+ fs_1.default.copyFileSync(configSourcePath, configDestPath);
35
+ console.log(`已将 stdio-config.json 复制到 ${configDestPath}`);
36
+ }
37
+ else {
38
+ console.error(`错误: 配置文件未找到: ${configSourcePath}`);
39
+ }
40
+ }
41
+ catch (error) {
42
+ console.error('复制配置文件时出错:', error);
43
+ }
44
+ // 复制package.json并更新其内容
45
+ console.log('准备package.json...');
46
+ const packageJson = require('../../package.json');
47
+ // 创建安装说明
48
+ const readmeContent = `# ${packageJson.name}
49
+
50
+ 本程序为Chrome扩展的Native Messaging主机端。
51
+
52
+ ## 安装说明
53
+
54
+ 1. 确保已安装Node.js
55
+ 2. 全局安装本程序:
56
+ \`\`\`
57
+ npm install -g ${packageJson.name}
58
+ \`\`\`
59
+ 3. 注册Native Messaging主机:
60
+ \`\`\`
61
+ # 用户级别安装(推荐)
62
+ ${packageJson.name} register
63
+
64
+ # 如果用户级别安装失败,可以尝试系统级别安装
65
+ ${packageJson.name} register --system
66
+ # 或者使用管理员权限
67
+ sudo ${packageJson.name} register
68
+ \`\`\`
69
+
70
+ ## 使用方法
71
+
72
+ 此应用程序由Chrome扩展自动启动,无需手动运行。
73
+ `;
74
+ fs_1.default.writeFileSync(path_1.default.join(distDir, 'README.md'), readmeContent);
75
+ console.log('复制包装脚本...');
76
+ const scriptsSourceDir = path_1.default.join(__dirname, '.');
77
+ const macOsWrapperSourcePath = path_1.default.join(scriptsSourceDir, 'run_host.sh');
78
+ const windowsWrapperSourcePath = path_1.default.join(scriptsSourceDir, 'run_host.bat');
79
+ const macOsWrapperDestPath = path_1.default.join(distDir, 'run_host.sh');
80
+ const windowsWrapperDestPath = path_1.default.join(distDir, 'run_host.bat');
81
+ try {
82
+ if (fs_1.default.existsSync(macOsWrapperSourcePath)) {
83
+ fs_1.default.copyFileSync(macOsWrapperSourcePath, macOsWrapperDestPath);
84
+ console.log(`已将 ${macOsWrapperSourcePath} 复制到 ${macOsWrapperDestPath}`);
85
+ }
86
+ else {
87
+ console.error(`错误: macOS 包装脚本源文件未找到: ${macOsWrapperSourcePath}`);
88
+ }
89
+ if (fs_1.default.existsSync(windowsWrapperSourcePath)) {
90
+ fs_1.default.copyFileSync(windowsWrapperSourcePath, windowsWrapperDestPath);
91
+ console.log(`已将 ${windowsWrapperSourcePath} 复制到 ${windowsWrapperDestPath}`);
92
+ }
93
+ else {
94
+ console.error(`错误: Windows 包装脚本源文件未找到: ${windowsWrapperSourcePath}`);
95
+ }
96
+ }
97
+ catch (error) {
98
+ console.error('复制包装脚本时出错:', error);
99
+ }
100
+ // 为关键JavaScript文件和macOS包装脚本添加可执行权限
101
+ console.log('添加可执行权限...');
102
+ const filesToMakeExecutable = ['index.js', 'cli.js', 'run_host.sh']; // cli.js 假设在 dist 根目录
103
+ filesToMakeExecutable.forEach((file) => {
104
+ const filePath = path_1.default.join(distDir, file); // filePath 现在是目标路径
105
+ try {
106
+ if (fs_1.default.existsSync(filePath)) {
107
+ fs_1.default.chmodSync(filePath, '755');
108
+ console.log(`已为 ${file} 添加可执行权限 (755)`);
109
+ }
110
+ else {
111
+ console.warn(`警告: ${filePath} 不存在,无法添加可执行权限`);
112
+ }
113
+ }
114
+ catch (error) {
115
+ console.error(`为 ${file} 添加可执行权限时出错:`, error);
116
+ }
117
+ });
118
+ // Write node_path.txt immediately after build to ensure Chrome uses the correct Node.js version.
119
+ // This is critical for development mode where dist is deleted on each rebuild.
120
+ // The file points to the same Node.js that compiled the native modules (better-sqlite3 etc.)
121
+ console.log('写入 node_path.txt...');
122
+ const nodePathFile = path_1.default.join(distDir, 'node_path.txt');
123
+ fs_1.default.writeFileSync(nodePathFile, process.execPath, 'utf8');
124
+ console.log(`已写入 Node.js 路径: ${process.execPath}`);
125
+ console.log('✅ 构建完成');
126
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/scripts/build.ts"],"names":[],"mappings":"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"}