@opentabs-dev/mcp-server 0.0.19

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 (309) hide show
  1. package/dist/audit-disk.d.ts +23 -0
  2. package/dist/audit-disk.d.ts.map +1 -0
  3. package/dist/audit-disk.js +74 -0
  4. package/dist/audit-disk.js.map +1 -0
  5. package/dist/browser-tools/analyze-site/detect-apis.d.ts +36 -0
  6. package/dist/browser-tools/analyze-site/detect-apis.d.ts.map +1 -0
  7. package/dist/browser-tools/analyze-site/detect-apis.js +383 -0
  8. package/dist/browser-tools/analyze-site/detect-apis.js.map +1 -0
  9. package/dist/browser-tools/analyze-site/detect-auth.d.ts +72 -0
  10. package/dist/browser-tools/analyze-site/detect-auth.d.ts.map +1 -0
  11. package/dist/browser-tools/analyze-site/detect-auth.js +384 -0
  12. package/dist/browser-tools/analyze-site/detect-auth.js.map +1 -0
  13. package/dist/browser-tools/analyze-site/detect-dom.d.ts +65 -0
  14. package/dist/browser-tools/analyze-site/detect-dom.d.ts.map +1 -0
  15. package/dist/browser-tools/analyze-site/detect-dom.js +45 -0
  16. package/dist/browser-tools/analyze-site/detect-dom.js.map +1 -0
  17. package/dist/browser-tools/analyze-site/detect-framework.d.ts +48 -0
  18. package/dist/browser-tools/analyze-site/detect-framework.d.ts.map +1 -0
  19. package/dist/browser-tools/analyze-site/detect-framework.js +31 -0
  20. package/dist/browser-tools/analyze-site/detect-framework.js.map +1 -0
  21. package/dist/browser-tools/analyze-site/detect-globals.d.ts +41 -0
  22. package/dist/browser-tools/analyze-site/detect-globals.d.ts.map +1 -0
  23. package/dist/browser-tools/analyze-site/detect-globals.js +42 -0
  24. package/dist/browser-tools/analyze-site/detect-globals.js.map +1 -0
  25. package/dist/browser-tools/analyze-site/detect-storage.d.ts +39 -0
  26. package/dist/browser-tools/analyze-site/detect-storage.d.ts.map +1 -0
  27. package/dist/browser-tools/analyze-site/detect-storage.js +34 -0
  28. package/dist/browser-tools/analyze-site/detect-storage.js.map +1 -0
  29. package/dist/browser-tools/analyze-site/index.d.ts +52 -0
  30. package/dist/browser-tools/analyze-site/index.d.ts.map +1 -0
  31. package/dist/browser-tools/analyze-site/index.js +827 -0
  32. package/dist/browser-tools/analyze-site/index.js.map +1 -0
  33. package/dist/browser-tools/analyze-site.d.ts +17 -0
  34. package/dist/browser-tools/analyze-site.d.ts.map +1 -0
  35. package/dist/browser-tools/analyze-site.js +41 -0
  36. package/dist/browser-tools/analyze-site.js.map +1 -0
  37. package/dist/browser-tools/clear-console-logs.d.ts +9 -0
  38. package/dist/browser-tools/clear-console-logs.d.ts.map +1 -0
  39. package/dist/browser-tools/clear-console-logs.js +16 -0
  40. package/dist/browser-tools/clear-console-logs.js.map +1 -0
  41. package/dist/browser-tools/click-element.d.ts +10 -0
  42. package/dist/browser-tools/click-element.d.ts.map +1 -0
  43. package/dist/browser-tools/click-element.js +22 -0
  44. package/dist/browser-tools/click-element.js.map +1 -0
  45. package/dist/browser-tools/close-tab.d.ts +9 -0
  46. package/dist/browser-tools/close-tab.d.ts.map +1 -0
  47. package/dist/browser-tools/close-tab.js +16 -0
  48. package/dist/browser-tools/close-tab.js.map +1 -0
  49. package/dist/browser-tools/definition.d.ts +26 -0
  50. package/dist/browser-tools/definition.d.ts.map +1 -0
  51. package/dist/browser-tools/definition.js +16 -0
  52. package/dist/browser-tools/definition.js.map +1 -0
  53. package/dist/browser-tools/delete-cookies.d.ts +10 -0
  54. package/dist/browser-tools/delete-cookies.d.ts.map +1 -0
  55. package/dist/browser-tools/delete-cookies.js +19 -0
  56. package/dist/browser-tools/delete-cookies.js.map +1 -0
  57. package/dist/browser-tools/disable-network-capture.d.ts +9 -0
  58. package/dist/browser-tools/disable-network-capture.d.ts.map +1 -0
  59. package/dist/browser-tools/disable-network-capture.js +16 -0
  60. package/dist/browser-tools/disable-network-capture.js.map +1 -0
  61. package/dist/browser-tools/enable-network-capture.d.ts +12 -0
  62. package/dist/browser-tools/enable-network-capture.d.ts.map +1 -0
  63. package/dist/browser-tools/enable-network-capture.js +42 -0
  64. package/dist/browser-tools/enable-network-capture.js.map +1 -0
  65. package/dist/browser-tools/execute-script.d.ts +19 -0
  66. package/dist/browser-tools/execute-script.d.ts.map +1 -0
  67. package/dist/browser-tools/execute-script.js +51 -0
  68. package/dist/browser-tools/execute-script.js.map +1 -0
  69. package/dist/browser-tools/extension-check-adapter.d.ts +11 -0
  70. package/dist/browser-tools/extension-check-adapter.d.ts.map +1 -0
  71. package/dist/browser-tools/extension-check-adapter.js +22 -0
  72. package/dist/browser-tools/extension-check-adapter.js.map +1 -0
  73. package/dist/browser-tools/extension-force-reconnect.d.ts +9 -0
  74. package/dist/browser-tools/extension-force-reconnect.d.ts.map +1 -0
  75. package/dist/browser-tools/extension-force-reconnect.js +19 -0
  76. package/dist/browser-tools/extension-force-reconnect.js.map +1 -0
  77. package/dist/browser-tools/extension-get-logs.d.ts +24 -0
  78. package/dist/browser-tools/extension-get-logs.d.ts.map +1 -0
  79. package/dist/browser-tools/extension-get-logs.js +34 -0
  80. package/dist/browser-tools/extension-get-logs.js.map +1 -0
  81. package/dist/browser-tools/extension-get-side-panel.d.ts +8 -0
  82. package/dist/browser-tools/extension-get-side-panel.d.ts.map +1 -0
  83. package/dist/browser-tools/extension-get-side-panel.js +17 -0
  84. package/dist/browser-tools/extension-get-side-panel.js.map +1 -0
  85. package/dist/browser-tools/extension-get-state.d.ts +9 -0
  86. package/dist/browser-tools/extension-get-state.d.ts.map +1 -0
  87. package/dist/browser-tools/extension-get-state.js +19 -0
  88. package/dist/browser-tools/extension-get-state.js.map +1 -0
  89. package/dist/browser-tools/focus-tab.d.ts +9 -0
  90. package/dist/browser-tools/focus-tab.d.ts.map +1 -0
  91. package/dist/browser-tools/focus-tab.js +17 -0
  92. package/dist/browser-tools/focus-tab.js.map +1 -0
  93. package/dist/browser-tools/get-console-logs.d.ts +18 -0
  94. package/dist/browser-tools/get-console-logs.d.ts.map +1 -0
  95. package/dist/browser-tools/get-console-logs.js +30 -0
  96. package/dist/browser-tools/get-console-logs.js.map +1 -0
  97. package/dist/browser-tools/get-cookies.d.ts +10 -0
  98. package/dist/browser-tools/get-cookies.d.ts.map +1 -0
  99. package/dist/browser-tools/get-cookies.js +23 -0
  100. package/dist/browser-tools/get-cookies.js.map +1 -0
  101. package/dist/browser-tools/get-network-requests.d.ts +10 -0
  102. package/dist/browser-tools/get-network-requests.d.ts.map +1 -0
  103. package/dist/browser-tools/get-network-requests.js +27 -0
  104. package/dist/browser-tools/get-network-requests.js.map +1 -0
  105. package/dist/browser-tools/get-page-html.d.ts +11 -0
  106. package/dist/browser-tools/get-page-html.d.ts.map +1 -0
  107. package/dist/browser-tools/get-page-html.js +32 -0
  108. package/dist/browser-tools/get-page-html.js.map +1 -0
  109. package/dist/browser-tools/get-resource-content.d.ts +11 -0
  110. package/dist/browser-tools/get-resource-content.d.ts.map +1 -0
  111. package/dist/browser-tools/get-resource-content.js +31 -0
  112. package/dist/browser-tools/get-resource-content.js.map +1 -0
  113. package/dist/browser-tools/get-storage.d.ts +14 -0
  114. package/dist/browser-tools/get-storage.d.ts.map +1 -0
  115. package/dist/browser-tools/get-storage.js +28 -0
  116. package/dist/browser-tools/get-storage.js.map +1 -0
  117. package/dist/browser-tools/get-tab-content.d.ts +11 -0
  118. package/dist/browser-tools/get-tab-content.d.ts.map +1 -0
  119. package/dist/browser-tools/get-tab-content.js +29 -0
  120. package/dist/browser-tools/get-tab-content.js.map +1 -0
  121. package/dist/browser-tools/get-tab-info.d.ts +9 -0
  122. package/dist/browser-tools/get-tab-info.d.ts.map +1 -0
  123. package/dist/browser-tools/get-tab-info.js +17 -0
  124. package/dist/browser-tools/get-tab-info.js.map +1 -0
  125. package/dist/browser-tools/handle-dialog.d.ts +14 -0
  126. package/dist/browser-tools/handle-dialog.d.ts.map +1 -0
  127. package/dist/browser-tools/handle-dialog.js +30 -0
  128. package/dist/browser-tools/handle-dialog.js.map +1 -0
  129. package/dist/browser-tools/hover-element.d.ts +11 -0
  130. package/dist/browser-tools/hover-element.d.ts.map +1 -0
  131. package/dist/browser-tools/hover-element.js +24 -0
  132. package/dist/browser-tools/hover-element.js.map +1 -0
  133. package/dist/browser-tools/index.d.ts +7 -0
  134. package/dist/browser-tools/index.d.ts.map +1 -0
  135. package/dist/browser-tools/index.js +81 -0
  136. package/dist/browser-tools/index.js.map +1 -0
  137. package/dist/browser-tools/list-resources.d.ts +10 -0
  138. package/dist/browser-tools/list-resources.d.ts.map +1 -0
  139. package/dist/browser-tools/list-resources.js +29 -0
  140. package/dist/browser-tools/list-resources.js.map +1 -0
  141. package/dist/browser-tools/list-tabs.d.ts +7 -0
  142. package/dist/browser-tools/list-tabs.d.ts.map +1 -0
  143. package/dist/browser-tools/list-tabs.js +16 -0
  144. package/dist/browser-tools/list-tabs.js.map +1 -0
  145. package/dist/browser-tools/navigate-tab.d.ts +10 -0
  146. package/dist/browser-tools/navigate-tab.d.ts.map +1 -0
  147. package/dist/browser-tools/navigate-tab.js +18 -0
  148. package/dist/browser-tools/navigate-tab.js.map +1 -0
  149. package/dist/browser-tools/open-tab.d.ts +9 -0
  150. package/dist/browser-tools/open-tab.d.ts.map +1 -0
  151. package/dist/browser-tools/open-tab.js +18 -0
  152. package/dist/browser-tools/open-tab.js.map +1 -0
  153. package/dist/browser-tools/press-key.d.ts +17 -0
  154. package/dist/browser-tools/press-key.d.ts.map +1 -0
  155. package/dist/browser-tools/press-key.js +43 -0
  156. package/dist/browser-tools/press-key.js.map +1 -0
  157. package/dist/browser-tools/query-elements.d.ts +12 -0
  158. package/dist/browser-tools/query-elements.d.ts.map +1 -0
  159. package/dist/browser-tools/query-elements.js +30 -0
  160. package/dist/browser-tools/query-elements.js.map +1 -0
  161. package/dist/browser-tools/reload-extension.d.ts +13 -0
  162. package/dist/browser-tools/reload-extension.d.ts.map +1 -0
  163. package/dist/browser-tools/reload-extension.js +35 -0
  164. package/dist/browser-tools/reload-extension.js.map +1 -0
  165. package/dist/browser-tools/screenshot-tab.d.ts +9 -0
  166. package/dist/browser-tools/screenshot-tab.d.ts.map +1 -0
  167. package/dist/browser-tools/screenshot-tab.js +22 -0
  168. package/dist/browser-tools/screenshot-tab.js.map +1 -0
  169. package/dist/browser-tools/scroll.d.ts +23 -0
  170. package/dist/browser-tools/scroll.d.ts.map +1 -0
  171. package/dist/browser-tools/scroll.js +56 -0
  172. package/dist/browser-tools/scroll.js.map +1 -0
  173. package/dist/browser-tools/select-option.d.ts +12 -0
  174. package/dist/browser-tools/select-option.d.ts.map +1 -0
  175. package/dist/browser-tools/select-option.js +25 -0
  176. package/dist/browser-tools/select-option.js.map +1 -0
  177. package/dist/browser-tools/set-cookie.d.ts +16 -0
  178. package/dist/browser-tools/set-cookie.d.ts.map +1 -0
  179. package/dist/browser-tools/set-cookie.js +42 -0
  180. package/dist/browser-tools/set-cookie.js.map +1 -0
  181. package/dist/browser-tools/type-text.d.ts +12 -0
  182. package/dist/browser-tools/type-text.d.ts.map +1 -0
  183. package/dist/browser-tools/type-text.js +25 -0
  184. package/dist/browser-tools/type-text.js.map +1 -0
  185. package/dist/browser-tools/url-validation.d.ts +13 -0
  186. package/dist/browser-tools/url-validation.d.ts.map +1 -0
  187. package/dist/browser-tools/url-validation.js +23 -0
  188. package/dist/browser-tools/url-validation.js.map +1 -0
  189. package/dist/browser-tools/wait-for-element.d.ts +12 -0
  190. package/dist/browser-tools/wait-for-element.d.ts.map +1 -0
  191. package/dist/browser-tools/wait-for-element.js +29 -0
  192. package/dist/browser-tools/wait-for-element.js.map +1 -0
  193. package/dist/config.d.ts +99 -0
  194. package/dist/config.d.ts.map +1 -0
  195. package/dist/config.js +344 -0
  196. package/dist/config.js.map +1 -0
  197. package/dist/dev-mode.d.ts +14 -0
  198. package/dist/dev-mode.d.ts.map +1 -0
  199. package/dist/dev-mode.js +15 -0
  200. package/dist/dev-mode.js.map +1 -0
  201. package/dist/discovery-legacy.d.ts +32 -0
  202. package/dist/discovery-legacy.d.ts.map +1 -0
  203. package/dist/discovery-legacy.js +415 -0
  204. package/dist/discovery-legacy.js.map +1 -0
  205. package/dist/discovery.d.ts +28 -0
  206. package/dist/discovery.d.ts.map +1 -0
  207. package/dist/discovery.js +97 -0
  208. package/dist/discovery.js.map +1 -0
  209. package/dist/extension-install.d.ts +27 -0
  210. package/dist/extension-install.d.ts.map +1 -0
  211. package/dist/extension-install.js +75 -0
  212. package/dist/extension-install.js.map +1 -0
  213. package/dist/extension-protocol.d.ts +130 -0
  214. package/dist/extension-protocol.d.ts.map +1 -0
  215. package/dist/extension-protocol.js +869 -0
  216. package/dist/extension-protocol.js.map +1 -0
  217. package/dist/file-watcher.d.ts +75 -0
  218. package/dist/file-watcher.d.ts.map +1 -0
  219. package/dist/file-watcher.js +616 -0
  220. package/dist/file-watcher.js.map +1 -0
  221. package/dist/http-routes.d.ts +88 -0
  222. package/dist/http-routes.d.ts.map +1 -0
  223. package/dist/http-routes.js +545 -0
  224. package/dist/http-routes.js.map +1 -0
  225. package/dist/index.d.ts +45 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +187 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/loader.d.ts +100 -0
  230. package/dist/loader.d.ts.map +1 -0
  231. package/dist/loader.js +402 -0
  232. package/dist/loader.js.map +1 -0
  233. package/dist/log-buffer.d.ts +33 -0
  234. package/dist/log-buffer.d.ts.map +1 -0
  235. package/dist/log-buffer.js +64 -0
  236. package/dist/log-buffer.js.map +1 -0
  237. package/dist/logger.d.ts +34 -0
  238. package/dist/logger.d.ts.map +1 -0
  239. package/dist/logger.js +81 -0
  240. package/dist/logger.js.map +1 -0
  241. package/dist/manifest-schema.d.ts +14 -0
  242. package/dist/manifest-schema.d.ts.map +1 -0
  243. package/dist/manifest-schema.js +51 -0
  244. package/dist/manifest-schema.js.map +1 -0
  245. package/dist/mcp-setup.d.ts +131 -0
  246. package/dist/mcp-setup.d.ts.map +1 -0
  247. package/dist/mcp-setup.js +673 -0
  248. package/dist/mcp-setup.js.map +1 -0
  249. package/dist/permissions.d.ts +59 -0
  250. package/dist/permissions.d.ts.map +1 -0
  251. package/dist/permissions.js +141 -0
  252. package/dist/permissions.js.map +1 -0
  253. package/dist/registry.d.ts +78 -0
  254. package/dist/registry.d.ts.map +1 -0
  255. package/dist/registry.js +187 -0
  256. package/dist/registry.js.map +1 -0
  257. package/dist/reload.d.ts +52 -0
  258. package/dist/reload.d.ts.map +1 -0
  259. package/dist/reload.js +326 -0
  260. package/dist/reload.js.map +1 -0
  261. package/dist/resolver.d.ts +53 -0
  262. package/dist/resolver.d.ts.map +1 -0
  263. package/dist/resolver.js +272 -0
  264. package/dist/resolver.js.map +1 -0
  265. package/dist/sanitize-error.d.ts +8 -0
  266. package/dist/sanitize-error.d.ts.map +1 -0
  267. package/dist/sanitize-error.js +25 -0
  268. package/dist/sanitize-error.js.map +1 -0
  269. package/dist/sanitize-tool-output.d.ts +20 -0
  270. package/dist/sanitize-tool-output.d.ts.map +1 -0
  271. package/dist/sanitize-tool-output.js +52 -0
  272. package/dist/sanitize-tool-output.js.map +1 -0
  273. package/dist/sdk-version.d.ts +11 -0
  274. package/dist/sdk-version.d.ts.map +1 -0
  275. package/dist/sdk-version.js +23 -0
  276. package/dist/sdk-version.js.map +1 -0
  277. package/dist/shutdown.d.ts +28 -0
  278. package/dist/shutdown.d.ts.map +1 -0
  279. package/dist/shutdown.js +68 -0
  280. package/dist/shutdown.js.map +1 -0
  281. package/dist/skip-confirmation.d.ts +15 -0
  282. package/dist/skip-confirmation.d.ts.map +1 -0
  283. package/dist/skip-confirmation.js +16 -0
  284. package/dist/skip-confirmation.js.map +1 -0
  285. package/dist/skip-sanitization.d.ts +17 -0
  286. package/dist/skip-sanitization.d.ts.map +1 -0
  287. package/dist/skip-sanitization.js +18 -0
  288. package/dist/skip-sanitization.js.map +1 -0
  289. package/dist/skip-verification.d.ts +11 -0
  290. package/dist/skip-verification.d.ts.map +1 -0
  291. package/dist/skip-verification.js +12 -0
  292. package/dist/skip-verification.js.map +1 -0
  293. package/dist/state.d.ts +290 -0
  294. package/dist/state.d.ts.map +1 -0
  295. package/dist/state.js +111 -0
  296. package/dist/state.js.map +1 -0
  297. package/dist/verify-plugin.d.ts +53 -0
  298. package/dist/verify-plugin.d.ts.map +1 -0
  299. package/dist/verify-plugin.js +123 -0
  300. package/dist/verify-plugin.js.map +1 -0
  301. package/dist/version-check.d.ts +35 -0
  302. package/dist/version-check.d.ts.map +1 -0
  303. package/dist/version-check.js +111 -0
  304. package/dist/version-check.js.map +1 -0
  305. package/dist/version.d.ts +10 -0
  306. package/dist/version.d.ts.map +1 -0
  307. package/dist/version.js +22 -0
  308. package/dist/version.js.map +1 -0
  309. package/package.json +28 -0
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Managed extension auto-install.
3
+ *
4
+ * On every MCP server startup (and hot reload), checks whether the browser
5
+ * extension in ~/.opentabs/extension/ is up to date with the server's package
6
+ * version. If the version file is missing or stale, copies the extension from
7
+ * the platform/browser-extension/ source directory, writes a version marker,
8
+ * and creates the adapters/ directory for plugin IIFEs.
9
+ *
10
+ * The copy excludes build/development artifacts (node_modules, src, .git,
11
+ * tsconfig*) — only the files needed to load an unpacked extension in Chrome.
12
+ */
13
+ import { getAdaptersDir, getExtensionDir, getExtensionVersionFile } from './config.js';
14
+ import { log } from './logger.js';
15
+ import { version } from './version.js';
16
+ import { EXTENSION_COPY_EXCLUDE_PATTERN } from '@opentabs-dev/shared';
17
+ import { cpSync, mkdirSync } from 'node:fs';
18
+ import { dirname, join, relative, resolve } from 'node:path';
19
+ import { fileURLToPath } from 'node:url';
20
+ /**
21
+ * Resolve the browser-extension source directory relative to this module's
22
+ * compiled location. The MCP server compiles to dist/extension-install.js,
23
+ * so browser-extension is at ../../browser-extension from that file.
24
+ */
25
+ const getExtensionSourceDir = () => resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', 'browser-extension');
26
+ const ensureExtensionInstalled = async () => {
27
+ const extensionDir = getExtensionDir();
28
+ const versionFile = getExtensionVersionFile();
29
+ const adaptersDir = getAdaptersDir();
30
+ // Read installed version (missing file → empty string → mismatch)
31
+ let installedVersion = '';
32
+ try {
33
+ const file = Bun.file(versionFile);
34
+ if (await file.exists()) {
35
+ installedVersion = (await file.text()).trim();
36
+ }
37
+ }
38
+ catch {
39
+ // File unreadable — treat as missing
40
+ }
41
+ if (installedVersion === version) {
42
+ log.debug(`Managed extension is up to date (v${version})`);
43
+ return { versionChanged: false };
44
+ }
45
+ // Version mismatch or missing — perform the copy
46
+ const extensionSrc = getExtensionSourceDir();
47
+ // Verify the source exists before attempting the copy
48
+ if (!(await Bun.file(join(extensionSrc, 'manifest.json')).exists())) {
49
+ log.warn(`Browser extension source not found at ${extensionSrc}, skipping auto-install`);
50
+ return { versionChanged: false };
51
+ }
52
+ log.info(installedVersion
53
+ ? `Updating managed extension: v${installedVersion} → v${version}`
54
+ : `Installing managed extension v${version}`);
55
+ try {
56
+ cpSync(extensionSrc, extensionDir, {
57
+ recursive: true,
58
+ force: true,
59
+ filter: (source) => {
60
+ const rel = relative(extensionSrc, source);
61
+ return rel === '' || !EXTENSION_COPY_EXCLUDE_PATTERN.test(rel);
62
+ },
63
+ });
64
+ mkdirSync(adaptersDir, { recursive: true });
65
+ await Bun.write(versionFile, version);
66
+ log.info(`Managed extension installed to ${extensionDir}`);
67
+ return { versionChanged: true };
68
+ }
69
+ catch (err) {
70
+ log.warn('Failed to install managed extension:', err);
71
+ return { versionChanged: false };
72
+ }
73
+ };
74
+ export { ensureExtensionInstalled };
75
+ //# sourceMappingURL=extension-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-install.js","sourceRoot":"","sources":["../src/extension-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Extension WebSocket protocol handler.
3
+ * Handles JSON-RPC messages between the MCP server and Chrome extension.
4
+ */
5
+ import type { PluginLogEntry } from './log-buffer.js';
6
+ import type { ServerState, ConfirmationDecision } from './state.js';
7
+ import type { WsHandle } from '@opentabs-dev/shared';
8
+ /** Callbacks the extension protocol can invoke on the MCP side */
9
+ interface McpCallbacks {
10
+ onToolConfigChanged: () => void;
11
+ onToolConfigPersist: () => void;
12
+ onPluginLog: (entry: PluginLogEntry) => void;
13
+ }
14
+ /**
15
+ * Write a plugin's adapter IIFE to the extension's adapters/ directory.
16
+ * The extension injects adapters via chrome.scripting.executeScript({ files: [...] })
17
+ * using these files, bypassing page CSP restrictions.
18
+ *
19
+ * If a source map is provided, writes it alongside the adapter as {pluginName}.js.map
20
+ * and rewrites the sourceMappingURL in the IIFE to reference the per-plugin filename
21
+ * (prevents collisions when multiple plugins are loaded).
22
+ */
23
+ declare const writeAdapterFile: (pluginName: string, iife: string, sourceMap?: string) => Promise<void>;
24
+ /**
25
+ * Send sync.full notification to extension on connect.
26
+ * Writes all plugin adapter IIFEs to the extension's adapters/ directory,
27
+ * then sends plugin metadata (without IIFE content) to the extension.
28
+ */
29
+ declare const sendSyncFull: (state: ServerState) => Promise<void>;
30
+ /** Options for dispatchToExtension beyond the basic method + params */
31
+ interface DispatchOptions {
32
+ /** Human-readable description for timeout error messages (e.g., "browser.openTab" or "slack/send_message") */
33
+ label?: string;
34
+ /** MCP progressToken from the tools/call request's _meta — stored on PendingDispatch for progress forwarding */
35
+ progressToken?: string | number;
36
+ /** Callback to emit an MCP ProgressNotification when tool.progress arrives for this dispatch */
37
+ onProgress?: (progress: number, total: number, message?: string) => void;
38
+ }
39
+ /**
40
+ * Send a JSON-RPC request to the extension and return a promise for the response.
41
+ * Unified dispatch for both browser commands (browser.*, extension.*) and
42
+ * plugin tool dispatches (tool.dispatch).
43
+ */
44
+ declare const dispatchToExtension: (state: ServerState, method: string, params: Record<string, unknown>, options?: string | DispatchOptions) => Promise<unknown>;
45
+ /**
46
+ * Send tool.invocationStart notification to extension (for side panel animation).
47
+ */
48
+ declare const sendInvocationStart: (state: ServerState, plugin: string, tool: string) => void;
49
+ /**
50
+ * Send tool.invocationEnd notification to extension (for side panel animation).
51
+ */
52
+ declare const sendInvocationEnd: (state: ServerState, plugin: string, tool: string, durationMs: number, success: boolean) => void;
53
+ /**
54
+ * Send a confirmation request to the extension and return a promise that resolves
55
+ * with the user's decision. The promise rejects on timeout (30s) or extension disconnect.
56
+ *
57
+ * @param state - Server state
58
+ * @param tool - Browser tool name (e.g., 'browser_execute_script')
59
+ * @param domain - Target domain (e.g., 'mail.google.com'), or null
60
+ * @param tabId - Target tab ID, if applicable
61
+ * @param paramsPreview - Truncated preview of tool parameters
62
+ * @returns The user's decision: 'allow_once', 'allow_always', or 'deny'
63
+ */
64
+ declare const sendConfirmationRequest: (state: ServerState, tool: string, domain: string | null, tabId: number | undefined, paramsPreview: string) => Promise<ConfirmationDecision>;
65
+ /**
66
+ * Reject all pending confirmations. Called when the extension disconnects
67
+ * to clean up any confirmation promises that can no longer be fulfilled.
68
+ */
69
+ declare const rejectAllPendingConfirmations: (state: ServerState) => void;
70
+ /**
71
+ * Send plugin.update notification to extension with updated plugin metadata.
72
+ * Writes the adapter IIFE to the extension's adapters/ directory first,
73
+ * then sends the notification (without IIFE content) to the extension.
74
+ *
75
+ * Used by file watcher when a local plugin's manifest or IIFE changes on disk,
76
+ * and by the hot reload sequence after re-discovery.
77
+ *
78
+ * Sent as a JSON-RPC notification (no id, no response expected). The extension
79
+ * processes the update and re-injects the adapter into matching tabs.
80
+ */
81
+ declare const sendPluginUpdate: (state: ServerState, pluginName: string, iife: string, sourceMap?: string) => Promise<void>;
82
+ /**
83
+ * Handle an incoming WebSocket message from the extension.
84
+ * Routes to the appropriate handler based on method/id.
85
+ *
86
+ * @param senderWs - The raw WebSocket that sent this message. Used to reply
87
+ * pongs on the exact connection that pinged, preventing race conditions
88
+ * during hot reload when two connections may briefly coexist.
89
+ */
90
+ declare const handleExtensionMessage: (state: ServerState, text: string, callbacks: McpCallbacks, senderWs?: WsHandle) => void;
91
+ /**
92
+ * Check if an error is a DispatchError by duck-typing rather than instanceof.
93
+ *
94
+ * Under bun --hot, each module re-evaluation creates a new DispatchError class.
95
+ * If a tool dispatch timeout fires after hot reload, the error is an instance of
96
+ * the OLD module's DispatchError class. Using `instanceof` against the NEW
97
+ * module's DispatchError would fail, causing the error to fall through to the
98
+ * generic catch branch and lose the specific error code/message. Duck-typing
99
+ * avoids this cross-reload class identity problem.
100
+ */
101
+ declare const isDispatchError: (err: unknown) => err is {
102
+ name: string;
103
+ message: string;
104
+ code: number;
105
+ data?: Record<string, unknown>;
106
+ };
107
+ /**
108
+ * Write a dynamic exec script to the adapters/ directory.
109
+ * Wraps the user's code in an IIFE that captures the result (sync or async)
110
+ * into globalThis.__openTabs.__lastExecResult for the extension to read back.
111
+ *
112
+ * Returns the filename (relative to adapters/) for the extension to inject.
113
+ */
114
+ declare const writeExecFile: (execId: string, code: string) => Promise<string>;
115
+ /** Delete a dynamic exec script file. Fire-and-forget — logs on failure. */
116
+ declare const deleteExecFile: (filename: string) => Promise<void>;
117
+ /**
118
+ * Remove stale __exec-*.js files from the adapters directory.
119
+ * Called on server startup to clean up leftovers from crashed sessions.
120
+ */
121
+ declare const cleanupStaleExecFiles: () => Promise<void>;
122
+ /**
123
+ * Send extension.reload JSON-RPC request to trigger chrome.runtime.reload()
124
+ * in the connected extension. Used when the server detects that the managed
125
+ * extension files were updated (version change).
126
+ */
127
+ declare const sendExtensionReload: (state: ServerState) => boolean;
128
+ export type { McpCallbacks };
129
+ export { sendSyncFull, dispatchToExtension, sendInvocationStart, sendInvocationEnd, sendConfirmationRequest, rejectAllPendingConfirmations, sendPluginUpdate, handleExtensionMessage, isDispatchError, writeAdapterFile, writeExecFile, deleteExecFile, cleanupStaleExecFiles, sendExtensionReload, };
130
+ //# sourceMappingURL=extension-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-protocol.d.ts","sourceRoot":"","sources":["../src/extension-protocol.ts"],"names":[],"mappings":"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"}