@iflow-mcp/shaun0927-openchrome 1.7.13

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 (525) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +387 -0
  3. package/assets/chart-tokens.svg +42 -0
  4. package/assets/demo.svg +278 -0
  5. package/assets/mascot.png +0 -0
  6. package/dist/cdp/client.d.ts +265 -0
  7. package/dist/cdp/client.d.ts.map +1 -0
  8. package/dist/cdp/client.js +1419 -0
  9. package/dist/cdp/client.js.map +1 -0
  10. package/dist/cdp/connection-pool.d.ts +117 -0
  11. package/dist/cdp/connection-pool.d.ts.map +1 -0
  12. package/dist/cdp/connection-pool.js +421 -0
  13. package/dist/cdp/connection-pool.js.map +1 -0
  14. package/dist/cdp/screenshot-scheduler.d.ts +55 -0
  15. package/dist/cdp/screenshot-scheduler.d.ts.map +1 -0
  16. package/dist/cdp/screenshot-scheduler.js +121 -0
  17. package/dist/cdp/screenshot-scheduler.js.map +1 -0
  18. package/dist/chrome/launcher.d.ts +113 -0
  19. package/dist/chrome/launcher.d.ts.map +1 -0
  20. package/dist/chrome/launcher.js +850 -0
  21. package/dist/chrome/launcher.js.map +1 -0
  22. package/dist/chrome/pool.d.ts +43 -0
  23. package/dist/chrome/pool.d.ts.map +1 -0
  24. package/dist/chrome/pool.js +219 -0
  25. package/dist/chrome/pool.js.map +1 -0
  26. package/dist/chrome/profile-manager.d.ts +156 -0
  27. package/dist/chrome/profile-manager.d.ts.map +1 -0
  28. package/dist/chrome/profile-manager.js +558 -0
  29. package/dist/chrome/profile-manager.js.map +1 -0
  30. package/dist/cli/claude-session.d.ts +11 -0
  31. package/dist/cli/claude-session.js +349 -0
  32. package/dist/cli/claude-session.js.map +1 -0
  33. package/dist/cli/index.d.ts +14 -0
  34. package/dist/cli/index.js +1013 -0
  35. package/dist/cli/index.js.map +1 -0
  36. package/dist/cli/install.d.ts +16 -0
  37. package/dist/cli/install.js +185 -0
  38. package/dist/cli/install.js.map +1 -0
  39. package/dist/cli/uninstall.d.ts +7 -0
  40. package/dist/cli/uninstall.js +126 -0
  41. package/dist/cli/uninstall.js.map +1 -0
  42. package/dist/cli/update-check.d.ts +10 -0
  43. package/dist/cli/update-check.js +187 -0
  44. package/dist/cli/update-check.js.map +1 -0
  45. package/dist/compression/snapshot-store.d.ts +54 -0
  46. package/dist/compression/snapshot-store.d.ts.map +1 -0
  47. package/dist/compression/snapshot-store.js +183 -0
  48. package/dist/compression/snapshot-store.js.map +1 -0
  49. package/dist/config/defaults.d.ts +102 -0
  50. package/dist/config/defaults.d.ts.map +1 -0
  51. package/dist/config/defaults.js +102 -0
  52. package/dist/config/defaults.js.map +1 -0
  53. package/dist/config/global.d.ts +81 -0
  54. package/dist/config/global.d.ts.map +1 -0
  55. package/dist/config/global.js +30 -0
  56. package/dist/config/global.js.map +1 -0
  57. package/dist/config/index.d.ts +16 -0
  58. package/dist/config/index.d.ts.map +1 -0
  59. package/dist/config/index.js +21 -0
  60. package/dist/config/index.js.map +1 -0
  61. package/dist/config/tool-tiers.d.ts +14 -0
  62. package/dist/config/tool-tiers.d.ts.map +1 -0
  63. package/dist/config/tool-tiers.js +69 -0
  64. package/dist/config/tool-tiers.js.map +1 -0
  65. package/dist/dashboard/activity-tracker.d.ts +95 -0
  66. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  67. package/dist/dashboard/activity-tracker.js +275 -0
  68. package/dist/dashboard/activity-tracker.js.map +1 -0
  69. package/dist/dashboard/ansi.d.ts +117 -0
  70. package/dist/dashboard/ansi.d.ts.map +1 -0
  71. package/dist/dashboard/ansi.js +199 -0
  72. package/dist/dashboard/ansi.js.map +1 -0
  73. package/dist/dashboard/index.d.ts +110 -0
  74. package/dist/dashboard/index.d.ts.map +1 -0
  75. package/dist/dashboard/index.js +413 -0
  76. package/dist/dashboard/index.js.map +1 -0
  77. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  78. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  79. package/dist/dashboard/keyboard-handler.js +230 -0
  80. package/dist/dashboard/keyboard-handler.js.map +1 -0
  81. package/dist/dashboard/operation-controller.d.ts +76 -0
  82. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  83. package/dist/dashboard/operation-controller.js +167 -0
  84. package/dist/dashboard/operation-controller.js.map +1 -0
  85. package/dist/dashboard/renderer.d.ts +76 -0
  86. package/dist/dashboard/renderer.d.ts.map +1 -0
  87. package/dist/dashboard/renderer.js +193 -0
  88. package/dist/dashboard/renderer.js.map +1 -0
  89. package/dist/dashboard/types.d.ts +74 -0
  90. package/dist/dashboard/types.d.ts.map +1 -0
  91. package/dist/dashboard/types.js +12 -0
  92. package/dist/dashboard/types.js.map +1 -0
  93. package/dist/dashboard/views/main-view.d.ts +23 -0
  94. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  95. package/dist/dashboard/views/main-view.js +143 -0
  96. package/dist/dashboard/views/main-view.js.map +1 -0
  97. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  98. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  99. package/dist/dashboard/views/sessions-view.js +104 -0
  100. package/dist/dashboard/views/sessions-view.js.map +1 -0
  101. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  102. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  103. package/dist/dashboard/views/tabs-view.js +92 -0
  104. package/dist/dashboard/views/tabs-view.js.map +1 -0
  105. package/dist/dom/dom-serializer.d.ts +37 -0
  106. package/dist/dom/dom-serializer.d.ts.map +1 -0
  107. package/dist/dom/dom-serializer.js +429 -0
  108. package/dist/dom/dom-serializer.js.map +1 -0
  109. package/dist/dom/index.d.ts +2 -0
  110. package/dist/dom/index.d.ts.map +1 -0
  111. package/dist/dom/index.js +6 -0
  112. package/dist/dom/index.js.map +1 -0
  113. package/dist/errors/timeout.d.ts +20 -0
  114. package/dist/errors/timeout.d.ts.map +1 -0
  115. package/dist/errors/timeout.js +41 -0
  116. package/dist/errors/timeout.js.map +1 -0
  117. package/dist/hints/hint-engine.d.ts +117 -0
  118. package/dist/hints/hint-engine.d.ts.map +1 -0
  119. package/dist/hints/hint-engine.js +347 -0
  120. package/dist/hints/hint-engine.js.map +1 -0
  121. package/dist/hints/index.d.ts +8 -0
  122. package/dist/hints/index.d.ts.map +1 -0
  123. package/dist/hints/index.js +11 -0
  124. package/dist/hints/index.js.map +1 -0
  125. package/dist/hints/pattern-learner.d.ts +76 -0
  126. package/dist/hints/pattern-learner.d.ts.map +1 -0
  127. package/dist/hints/pattern-learner.js +254 -0
  128. package/dist/hints/pattern-learner.js.map +1 -0
  129. package/dist/hints/progress-tracker.d.ts +44 -0
  130. package/dist/hints/progress-tracker.d.ts.map +1 -0
  131. package/dist/hints/progress-tracker.js +118 -0
  132. package/dist/hints/progress-tracker.js.map +1 -0
  133. package/dist/hints/rules/blocking-page.d.ts +8 -0
  134. package/dist/hints/rules/blocking-page.d.ts.map +1 -0
  135. package/dist/hints/rules/blocking-page.js +58 -0
  136. package/dist/hints/rules/blocking-page.js.map +1 -0
  137. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  138. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  139. package/dist/hints/rules/composite-suggestions.js +138 -0
  140. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  141. package/dist/hints/rules/error-recovery.d.ts +7 -0
  142. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  143. package/dist/hints/rules/error-recovery.js +59 -0
  144. package/dist/hints/rules/error-recovery.js.map +1 -0
  145. package/dist/hints/rules/learned-rules.d.ts +13 -0
  146. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  147. package/dist/hints/rules/learned-rules.js +27 -0
  148. package/dist/hints/rules/learned-rules.js.map +1 -0
  149. package/dist/hints/rules/pagination-detection.d.ts +7 -0
  150. package/dist/hints/rules/pagination-detection.d.ts.map +1 -0
  151. package/dist/hints/rules/pagination-detection.js +220 -0
  152. package/dist/hints/rules/pagination-detection.js.map +1 -0
  153. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  154. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  155. package/dist/hints/rules/repetition-detection.js +271 -0
  156. package/dist/hints/rules/repetition-detection.js.map +1 -0
  157. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  158. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  159. package/dist/hints/rules/sequence-detection.js +99 -0
  160. package/dist/hints/rules/sequence-detection.js.map +1 -0
  161. package/dist/hints/rules/setup-hints.d.ts +6 -0
  162. package/dist/hints/rules/setup-hints.d.ts.map +1 -0
  163. package/dist/hints/rules/setup-hints.js +24 -0
  164. package/dist/hints/rules/setup-hints.js.map +1 -0
  165. package/dist/hints/rules/success-hints.d.ts +6 -0
  166. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  167. package/dist/hints/rules/success-hints.js +74 -0
  168. package/dist/hints/rules/success-hints.js.map +1 -0
  169. package/dist/index.d.ts +10 -0
  170. package/dist/index.d.ts.map +1 -0
  171. package/dist/index.js +357 -0
  172. package/dist/index.js.map +1 -0
  173. package/dist/lightpanda/launcher.d.ts +58 -0
  174. package/dist/lightpanda/launcher.d.ts.map +1 -0
  175. package/dist/lightpanda/launcher.js +210 -0
  176. package/dist/lightpanda/launcher.js.map +1 -0
  177. package/dist/mcp-server.d.ts +154 -0
  178. package/dist/mcp-server.d.ts.map +1 -0
  179. package/dist/mcp-server.js +962 -0
  180. package/dist/mcp-server.js.map +1 -0
  181. package/dist/memory/domain-memory.d.ts +68 -0
  182. package/dist/memory/domain-memory.d.ts.map +1 -0
  183. package/dist/memory/domain-memory.js +224 -0
  184. package/dist/memory/domain-memory.js.map +1 -0
  185. package/dist/orchestration/plan-executor.d.ts +19 -0
  186. package/dist/orchestration/plan-executor.d.ts.map +1 -0
  187. package/dist/orchestration/plan-executor.js +276 -0
  188. package/dist/orchestration/plan-executor.js.map +1 -0
  189. package/dist/orchestration/plan-registry.d.ts +55 -0
  190. package/dist/orchestration/plan-registry.d.ts.map +1 -0
  191. package/dist/orchestration/plan-registry.js +256 -0
  192. package/dist/orchestration/plan-registry.js.map +1 -0
  193. package/dist/orchestration/state-manager.d.ts +127 -0
  194. package/dist/orchestration/state-manager.d.ts.map +1 -0
  195. package/dist/orchestration/state-manager.js +438 -0
  196. package/dist/orchestration/state-manager.js.map +1 -0
  197. package/dist/orchestration/workflow-engine.d.ts +162 -0
  198. package/dist/orchestration/workflow-engine.d.ts.map +1 -0
  199. package/dist/orchestration/workflow-engine.js +748 -0
  200. package/dist/orchestration/workflow-engine.js.map +1 -0
  201. package/dist/resources/usage-guide.d.ts +13 -0
  202. package/dist/resources/usage-guide.d.ts.map +1 -0
  203. package/dist/resources/usage-guide.js +123 -0
  204. package/dist/resources/usage-guide.js.map +1 -0
  205. package/dist/router/browser-router.d.ts +47 -0
  206. package/dist/router/browser-router.d.ts.map +1 -0
  207. package/dist/router/browser-router.js +157 -0
  208. package/dist/router/browser-router.js.map +1 -0
  209. package/dist/router/cookie-sync.d.ts +48 -0
  210. package/dist/router/cookie-sync.d.ts.map +1 -0
  211. package/dist/router/cookie-sync.js +106 -0
  212. package/dist/router/cookie-sync.js.map +1 -0
  213. package/dist/router/index.d.ts +5 -0
  214. package/dist/router/index.d.ts.map +1 -0
  215. package/dist/router/index.js +10 -0
  216. package/dist/router/index.js.map +1 -0
  217. package/dist/router/tool-routing-registry.d.ts +21 -0
  218. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  219. package/dist/router/tool-routing-registry.js +89 -0
  220. package/dist/router/tool-routing-registry.js.map +1 -0
  221. package/dist/security/audit-logger.d.ts +2 -0
  222. package/dist/security/audit-logger.d.ts.map +1 -0
  223. package/dist/security/audit-logger.js +109 -0
  224. package/dist/security/audit-logger.js.map +1 -0
  225. package/dist/security/domain-guard.d.ts +11 -0
  226. package/dist/security/domain-guard.d.ts.map +1 -0
  227. package/dist/security/domain-guard.js +98 -0
  228. package/dist/security/domain-guard.js.map +1 -0
  229. package/dist/session-manager.d.ts +325 -0
  230. package/dist/session-manager.d.ts.map +1 -0
  231. package/dist/session-manager.js +1402 -0
  232. package/dist/session-manager.js.map +1 -0
  233. package/dist/storage-state/index.d.ts +2 -0
  234. package/dist/storage-state/index.d.ts.map +1 -0
  235. package/dist/storage-state/index.js +6 -0
  236. package/dist/storage-state/index.js.map +1 -0
  237. package/dist/storage-state/storage-state-manager.d.ts +52 -0
  238. package/dist/storage-state/storage-state-manager.d.ts.map +1 -0
  239. package/dist/storage-state/storage-state-manager.js +135 -0
  240. package/dist/storage-state/storage-state-manager.js.map +1 -0
  241. package/dist/tools/batch-execute.d.ts +11 -0
  242. package/dist/tools/batch-execute.d.ts.map +1 -0
  243. package/dist/tools/batch-execute.js +218 -0
  244. package/dist/tools/batch-execute.js.map +1 -0
  245. package/dist/tools/batch-paginate.d.ts +10 -0
  246. package/dist/tools/batch-paginate.d.ts.map +1 -0
  247. package/dist/tools/batch-paginate.js +436 -0
  248. package/dist/tools/batch-paginate.js.map +1 -0
  249. package/dist/tools/click-element.d.ts +8 -0
  250. package/dist/tools/click-element.d.ts.map +1 -0
  251. package/dist/tools/click-element.js +281 -0
  252. package/dist/tools/click-element.js.map +1 -0
  253. package/dist/tools/computer.d.ts +6 -0
  254. package/dist/tools/computer.d.ts.map +1 -0
  255. package/dist/tools/computer.js +832 -0
  256. package/dist/tools/computer.js.map +1 -0
  257. package/dist/tools/console-capture.d.ts +6 -0
  258. package/dist/tools/console-capture.d.ts.map +1 -0
  259. package/dist/tools/console-capture.js +380 -0
  260. package/dist/tools/console-capture.js.map +1 -0
  261. package/dist/tools/cookies.d.ts +6 -0
  262. package/dist/tools/cookies.d.ts.map +1 -0
  263. package/dist/tools/cookies.js +366 -0
  264. package/dist/tools/cookies.js.map +1 -0
  265. package/dist/tools/drag-drop.d.ts +6 -0
  266. package/dist/tools/drag-drop.d.ts.map +1 -0
  267. package/dist/tools/drag-drop.js +263 -0
  268. package/dist/tools/drag-drop.js.map +1 -0
  269. package/dist/tools/emulate-device.d.ts +6 -0
  270. package/dist/tools/emulate-device.d.ts.map +1 -0
  271. package/dist/tools/emulate-device.js +219 -0
  272. package/dist/tools/emulate-device.js.map +1 -0
  273. package/dist/tools/file-upload.d.ts +6 -0
  274. package/dist/tools/file-upload.d.ts.map +1 -0
  275. package/dist/tools/file-upload.js +224 -0
  276. package/dist/tools/file-upload.js.map +1 -0
  277. package/dist/tools/fill-form.d.ts +8 -0
  278. package/dist/tools/fill-form.d.ts.map +1 -0
  279. package/dist/tools/fill-form.js +311 -0
  280. package/dist/tools/fill-form.js.map +1 -0
  281. package/dist/tools/find.d.ts +6 -0
  282. package/dist/tools/find.d.ts.map +1 -0
  283. package/dist/tools/find.js +163 -0
  284. package/dist/tools/find.js.map +1 -0
  285. package/dist/tools/form-input.d.ts +6 -0
  286. package/dist/tools/form-input.d.ts.map +1 -0
  287. package/dist/tools/form-input.js +219 -0
  288. package/dist/tools/form-input.js.map +1 -0
  289. package/dist/tools/geolocation.d.ts +6 -0
  290. package/dist/tools/geolocation.d.ts.map +1 -0
  291. package/dist/tools/geolocation.js +170 -0
  292. package/dist/tools/geolocation.js.map +1 -0
  293. package/dist/tools/http-auth.d.ts +6 -0
  294. package/dist/tools/http-auth.d.ts.map +1 -0
  295. package/dist/tools/http-auth.js +132 -0
  296. package/dist/tools/http-auth.js.map +1 -0
  297. package/dist/tools/index.d.ts +6 -0
  298. package/dist/tools/index.d.ts.map +1 -0
  299. package/dist/tools/index.js +107 -0
  300. package/dist/tools/index.js.map +1 -0
  301. package/dist/tools/inspect.d.ts +12 -0
  302. package/dist/tools/inspect.d.ts.map +1 -0
  303. package/dist/tools/inspect.js +483 -0
  304. package/dist/tools/inspect.js.map +1 -0
  305. package/dist/tools/interact.d.ts +9 -0
  306. package/dist/tools/interact.d.ts.map +1 -0
  307. package/dist/tools/interact.js +366 -0
  308. package/dist/tools/interact.js.map +1 -0
  309. package/dist/tools/javascript.d.ts +7 -0
  310. package/dist/tools/javascript.d.ts.map +1 -0
  311. package/dist/tools/javascript.js +214 -0
  312. package/dist/tools/javascript.js.map +1 -0
  313. package/dist/tools/lightweight-scroll.d.ts +11 -0
  314. package/dist/tools/lightweight-scroll.d.ts.map +1 -0
  315. package/dist/tools/lightweight-scroll.js +314 -0
  316. package/dist/tools/lightweight-scroll.js.map +1 -0
  317. package/dist/tools/list-profiles.d.ts +10 -0
  318. package/dist/tools/list-profiles.d.ts.map +1 -0
  319. package/dist/tools/list-profiles.js +79 -0
  320. package/dist/tools/list-profiles.js.map +1 -0
  321. package/dist/tools/memory.d.ts +13 -0
  322. package/dist/tools/memory.d.ts.map +1 -0
  323. package/dist/tools/memory.js +159 -0
  324. package/dist/tools/memory.js.map +1 -0
  325. package/dist/tools/navigate.d.ts +6 -0
  326. package/dist/tools/navigate.d.ts.map +1 -0
  327. package/dist/tools/navigate.js +422 -0
  328. package/dist/tools/navigate.js.map +1 -0
  329. package/dist/tools/network.d.ts +6 -0
  330. package/dist/tools/network.d.ts.map +1 -0
  331. package/dist/tools/network.js +229 -0
  332. package/dist/tools/network.js.map +1 -0
  333. package/dist/tools/orchestration.d.ts +6 -0
  334. package/dist/tools/orchestration.d.ts.map +1 -0
  335. package/dist/tools/orchestration.js +735 -0
  336. package/dist/tools/orchestration.js.map +1 -0
  337. package/dist/tools/page-content.d.ts +6 -0
  338. package/dist/tools/page-content.d.ts.map +1 -0
  339. package/dist/tools/page-content.js +129 -0
  340. package/dist/tools/page-content.js.map +1 -0
  341. package/dist/tools/page-pdf.d.ts +6 -0
  342. package/dist/tools/page-pdf.d.ts.map +1 -0
  343. package/dist/tools/page-pdf.js +268 -0
  344. package/dist/tools/page-pdf.js.map +1 -0
  345. package/dist/tools/page-reload.d.ts +6 -0
  346. package/dist/tools/page-reload.d.ts.map +1 -0
  347. package/dist/tools/page-reload.js +91 -0
  348. package/dist/tools/page-reload.js.map +1 -0
  349. package/dist/tools/performance-metrics.d.ts +6 -0
  350. package/dist/tools/performance-metrics.d.ts.map +1 -0
  351. package/dist/tools/performance-metrics.js +154 -0
  352. package/dist/tools/performance-metrics.js.map +1 -0
  353. package/dist/tools/profile-status.d.ts +10 -0
  354. package/dist/tools/profile-status.d.ts.map +1 -0
  355. package/dist/tools/profile-status.js +108 -0
  356. package/dist/tools/profile-status.js.map +1 -0
  357. package/dist/tools/query-dom.d.ts +8 -0
  358. package/dist/tools/query-dom.d.ts.map +1 -0
  359. package/dist/tools/query-dom.js +647 -0
  360. package/dist/tools/query-dom.js.map +1 -0
  361. package/dist/tools/read-page.d.ts +6 -0
  362. package/dist/tools/read-page.d.ts.map +1 -0
  363. package/dist/tools/read-page.js +544 -0
  364. package/dist/tools/read-page.js.map +1 -0
  365. package/dist/tools/request-intercept.d.ts +6 -0
  366. package/dist/tools/request-intercept.d.ts.map +1 -0
  367. package/dist/tools/request-intercept.js +537 -0
  368. package/dist/tools/request-intercept.js.map +1 -0
  369. package/dist/tools/shutdown.d.ts +12 -0
  370. package/dist/tools/shutdown.d.ts.map +1 -0
  371. package/dist/tools/shutdown.js +124 -0
  372. package/dist/tools/shutdown.js.map +1 -0
  373. package/dist/tools/storage.d.ts +6 -0
  374. package/dist/tools/storage.d.ts.map +1 -0
  375. package/dist/tools/storage.js +262 -0
  376. package/dist/tools/storage.js.map +1 -0
  377. package/dist/tools/tabs-close.d.ts +6 -0
  378. package/dist/tools/tabs-close.d.ts.map +1 -0
  379. package/dist/tools/tabs-close.js +124 -0
  380. package/dist/tools/tabs-close.js.map +1 -0
  381. package/dist/tools/tabs-context.d.ts +6 -0
  382. package/dist/tools/tabs-context.d.ts.map +1 -0
  383. package/dist/tools/tabs-context.js +117 -0
  384. package/dist/tools/tabs-context.js.map +1 -0
  385. package/dist/tools/tabs-create.d.ts +6 -0
  386. package/dist/tools/tabs-create.d.ts.map +1 -0
  387. package/dist/tools/tabs-create.js +90 -0
  388. package/dist/tools/tabs-create.js.map +1 -0
  389. package/dist/tools/user-agent.d.ts +6 -0
  390. package/dist/tools/user-agent.d.ts.map +1 -0
  391. package/dist/tools/user-agent.js +126 -0
  392. package/dist/tools/user-agent.js.map +1 -0
  393. package/dist/tools/wait-and-click.d.ts +8 -0
  394. package/dist/tools/wait-and-click.d.ts.map +1 -0
  395. package/dist/tools/wait-and-click.js +165 -0
  396. package/dist/tools/wait-and-click.js.map +1 -0
  397. package/dist/tools/wait-for.d.ts +6 -0
  398. package/dist/tools/wait-for.d.ts.map +1 -0
  399. package/dist/tools/wait-for.js +290 -0
  400. package/dist/tools/wait-for.js.map +1 -0
  401. package/dist/tools/worker.d.ts +8 -0
  402. package/dist/tools/worker.d.ts.map +1 -0
  403. package/dist/tools/worker.js +160 -0
  404. package/dist/tools/worker.js.map +1 -0
  405. package/dist/types/browser-backend.d.ts +30 -0
  406. package/dist/types/browser-backend.d.ts.map +1 -0
  407. package/dist/types/browser-backend.js +9 -0
  408. package/dist/types/browser-backend.js.map +1 -0
  409. package/dist/types/index.d.ts +3 -0
  410. package/dist/types/index.d.ts.map +1 -0
  411. package/dist/types/index.js +19 -0
  412. package/dist/types/index.js.map +1 -0
  413. package/dist/types/mcp.d.ts +63 -0
  414. package/dist/types/mcp.d.ts.map +1 -0
  415. package/dist/types/mcp.js +14 -0
  416. package/dist/types/mcp.js.map +1 -0
  417. package/dist/types/plan-cache.d.ts +121 -0
  418. package/dist/types/plan-cache.d.ts.map +1 -0
  419. package/dist/types/plan-cache.js +9 -0
  420. package/dist/types/plan-cache.js.map +1 -0
  421. package/dist/types/session.d.ts +65 -0
  422. package/dist/types/session.d.ts.map +1 -0
  423. package/dist/types/session.js +6 -0
  424. package/dist/types/session.js.map +1 -0
  425. package/dist/types/tool-manifest.d.ts +52 -0
  426. package/dist/types/tool-manifest.d.ts.map +1 -0
  427. package/dist/types/tool-manifest.js +37 -0
  428. package/dist/types/tool-manifest.js.map +1 -0
  429. package/dist/utils/adaptive-screenshot.d.ts +57 -0
  430. package/dist/utils/adaptive-screenshot.d.ts.map +1 -0
  431. package/dist/utils/adaptive-screenshot.js +126 -0
  432. package/dist/utils/adaptive-screenshot.js.map +1 -0
  433. package/dist/utils/atomic-file.d.ts +50 -0
  434. package/dist/utils/atomic-file.d.ts.map +1 -0
  435. package/dist/utils/atomic-file.js +217 -0
  436. package/dist/utils/atomic-file.js.map +1 -0
  437. package/dist/utils/dom-delta.d.ts +36 -0
  438. package/dist/utils/dom-delta.d.ts.map +1 -0
  439. package/dist/utils/dom-delta.js +314 -0
  440. package/dist/utils/dom-delta.js.map +1 -0
  441. package/dist/utils/element-discovery.d.ts +115 -0
  442. package/dist/utils/element-discovery.d.ts.map +1 -0
  443. package/dist/utils/element-discovery.js +519 -0
  444. package/dist/utils/element-discovery.js.map +1 -0
  445. package/dist/utils/element-finder.d.ts +49 -0
  446. package/dist/utils/element-finder.d.ts.map +1 -0
  447. package/dist/utils/element-finder.js +130 -0
  448. package/dist/utils/element-finder.js.map +1 -0
  449. package/dist/utils/format-age.d.ts +5 -0
  450. package/dist/utils/format-age.d.ts.map +1 -0
  451. package/dist/utils/format-age.js +15 -0
  452. package/dist/utils/format-age.js.map +1 -0
  453. package/dist/utils/format-error.d.ts +5 -0
  454. package/dist/utils/format-error.d.ts.map +1 -0
  455. package/dist/utils/format-error.js +10 -0
  456. package/dist/utils/format-error.js.map +1 -0
  457. package/dist/utils/index.d.ts +7 -0
  458. package/dist/utils/index.d.ts.map +1 -0
  459. package/dist/utils/index.js +23 -0
  460. package/dist/utils/index.js.map +1 -0
  461. package/dist/utils/json-validator.d.ts +40 -0
  462. package/dist/utils/json-validator.d.ts.map +1 -0
  463. package/dist/utils/json-validator.js +295 -0
  464. package/dist/utils/json-validator.js.map +1 -0
  465. package/dist/utils/page-diagnostics.d.ts +23 -0
  466. package/dist/utils/page-diagnostics.d.ts.map +1 -0
  467. package/dist/utils/page-diagnostics.js +95 -0
  468. package/dist/utils/page-diagnostics.js.map +1 -0
  469. package/dist/utils/pagination-detector.d.ts +22 -0
  470. package/dist/utils/pagination-detector.d.ts.map +1 -0
  471. package/dist/utils/pagination-detector.js +292 -0
  472. package/dist/utils/pagination-detector.js.map +1 -0
  473. package/dist/utils/pid-manager.d.ts +6 -0
  474. package/dist/utils/pid-manager.d.ts.map +1 -0
  475. package/dist/utils/pid-manager.js +135 -0
  476. package/dist/utils/pid-manager.js.map +1 -0
  477. package/dist/utils/puppeteer-helpers.d.ts +8 -0
  478. package/dist/utils/puppeteer-helpers.d.ts.map +1 -0
  479. package/dist/utils/puppeteer-helpers.js +12 -0
  480. package/dist/utils/puppeteer-helpers.js.map +1 -0
  481. package/dist/utils/ref-id-manager.d.ts +72 -0
  482. package/dist/utils/ref-id-manager.d.ts.map +1 -0
  483. package/dist/utils/ref-id-manager.js +325 -0
  484. package/dist/utils/ref-id-manager.js.map +1 -0
  485. package/dist/utils/request-queue.d.ts +37 -0
  486. package/dist/utils/request-queue.d.ts.map +1 -0
  487. package/dist/utils/request-queue.js +114 -0
  488. package/dist/utils/request-queue.js.map +1 -0
  489. package/dist/utils/retry-with-fallback.d.ts +18 -0
  490. package/dist/utils/retry-with-fallback.d.ts.map +1 -0
  491. package/dist/utils/retry-with-fallback.js +39 -0
  492. package/dist/utils/retry-with-fallback.js.map +1 -0
  493. package/dist/utils/safe-title.d.ts +10 -0
  494. package/dist/utils/safe-title.d.ts.map +1 -0
  495. package/dist/utils/safe-title.js +24 -0
  496. package/dist/utils/safe-title.js.map +1 -0
  497. package/dist/utils/schema-validator.d.ts +12 -0
  498. package/dist/utils/schema-validator.d.ts.map +1 -0
  499. package/dist/utils/schema-validator.js +70 -0
  500. package/dist/utils/schema-validator.js.map +1 -0
  501. package/dist/utils/shadow-dom.d.ts +114 -0
  502. package/dist/utils/shadow-dom.d.ts.map +1 -0
  503. package/dist/utils/shadow-dom.js +385 -0
  504. package/dist/utils/shadow-dom.js.map +1 -0
  505. package/dist/utils/smart-goto.d.ts +39 -0
  506. package/dist/utils/smart-goto.d.ts.map +1 -0
  507. package/dist/utils/smart-goto.js +134 -0
  508. package/dist/utils/smart-goto.js.map +1 -0
  509. package/dist/utils/url-utils.d.ts +5 -0
  510. package/dist/utils/url-utils.d.ts.map +1 -0
  511. package/dist/utils/url-utils.js +15 -0
  512. package/dist/utils/url-utils.js.map +1 -0
  513. package/dist/utils/visual-summary.d.ts +17 -0
  514. package/dist/utils/visual-summary.d.ts.map +1 -0
  515. package/dist/utils/visual-summary.js +215 -0
  516. package/dist/utils/visual-summary.js.map +1 -0
  517. package/dist/utils/with-timeout.d.ts +5 -0
  518. package/dist/utils/with-timeout.d.ts.map +1 -0
  519. package/dist/utils/with-timeout.js +15 -0
  520. package/dist/utils/with-timeout.js.map +1 -0
  521. package/dist/version.d.ts +5 -0
  522. package/dist/version.d.ts.map +1 -0
  523. package/dist/version.js +22 -0
  524. package/dist/version.js.map +1 -0
  525. package/package.json +1 -0
@@ -0,0 +1,558 @@
1
+ "use strict";
2
+ /**
3
+ * ProfileManager - Persistent OpenChrome Profile Architecture
4
+ *
5
+ * Manages a persistent Chrome profile directory at ~/.openchrome/profile/
6
+ * instead of creating disposable temp profiles on every launch.
7
+ * Provides atomic cookie sync using the SQLite backup API.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.ProfileManager = void 0;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const os = __importStar(require("os"));
47
+ const child_process_1 = require("child_process");
48
+ // ---------------------------------------------------------------------------
49
+ // ProfileManager
50
+ // ---------------------------------------------------------------------------
51
+ /**
52
+ * Manages persistent OpenChrome Chrome profiles and cookie synchronisation.
53
+ *
54
+ * Key responsibilities:
55
+ * - Maintain a reusable profile at `~/.openchrome/profile/` so cookies and
56
+ * session data survive across OpenChrome restarts.
57
+ * - Track whether the persistent profile is stale relative to the real
58
+ * Chrome profile using lightweight file-stat hashing.
59
+ * - Perform atomic cookie sync via the `sqlite3` CLI `.backup` command when
60
+ * available, falling back to a plain file copy otherwise.
61
+ * - Decide which profile directory Chrome should use (`resolveProfile`).
62
+ */
63
+ class ProfileManager {
64
+ // -------------------------------------------------------------------------
65
+ // Constants (configurable via Object.defineProperty for testing)
66
+ // -------------------------------------------------------------------------
67
+ /** Root directory for the persistent OpenChrome profile. */
68
+ static PERSISTENT_PROFILE_DIR = path.join(os.homedir(), '.openchrome', 'profile');
69
+ /** Path to the JSON file that tracks the last sync state. */
70
+ static SYNC_METADATA_PATH = path.join(os.homedir(), '.openchrome', 'sync-metadata.json');
71
+ /** Cookie data is considered fresh if synced within this window (30 min). */
72
+ static COOKIE_FRESHNESS_MS = 30 * 60 * 1000;
73
+ // -------------------------------------------------------------------------
74
+ // Public methods
75
+ // -------------------------------------------------------------------------
76
+ /**
77
+ * Get the default Chrome user data directory for the current platform.
78
+ * Returns null if Chrome data directory is not found.
79
+ */
80
+ getDefaultUserDataDir() {
81
+ const platform = os.platform();
82
+ const home = os.homedir();
83
+ if (platform === 'darwin') {
84
+ const dir = path.join(home, 'Library', 'Application Support', 'Google', 'Chrome');
85
+ if (fs.existsSync(dir))
86
+ return dir;
87
+ }
88
+ else if (platform === 'win32') {
89
+ const localAppData = process.env['LOCALAPPDATA'] || path.join(home, 'AppData', 'Local');
90
+ const dir = path.join(localAppData, 'Google', 'Chrome', 'User Data');
91
+ if (fs.existsSync(dir))
92
+ return dir;
93
+ }
94
+ else {
95
+ const candidates = [
96
+ path.join(home, '.config', 'google-chrome'),
97
+ path.join(home, '.config', 'chromium'),
98
+ path.join(home, 'snap', 'chromium', 'current', '.config', 'chromium'),
99
+ ];
100
+ for (const dir of candidates) {
101
+ if (fs.existsSync(dir))
102
+ return dir;
103
+ }
104
+ }
105
+ return null;
106
+ }
107
+ /**
108
+ * List available Chrome profiles by reading the Local State file.
109
+ * Returns profile info sorted by directory name.
110
+ */
111
+ listProfiles(userDataDir) {
112
+ const dir = userDataDir || this.getDefaultUserDataDir();
113
+ if (!dir)
114
+ return [];
115
+ const localStatePath = path.join(dir, 'Local State');
116
+ try {
117
+ const raw = fs.readFileSync(localStatePath, 'utf8');
118
+ const localState = JSON.parse(raw);
119
+ const infoCache = localState?.profile?.info_cache;
120
+ if (!infoCache || typeof infoCache !== 'object')
121
+ return [];
122
+ const lastUsed = localState?.profile?.last_used;
123
+ return Object.entries(infoCache)
124
+ .map(([directory, info]) => ({
125
+ directory,
126
+ name: info?.name || directory,
127
+ ...(info?.user_name && { userName: info.user_name }),
128
+ ...(lastUsed === directory && { isActive: true }),
129
+ }))
130
+ .sort((a, b) => a.directory.localeCompare(b.directory));
131
+ }
132
+ catch {
133
+ return [];
134
+ }
135
+ }
136
+ /**
137
+ * Return the persistent profile directory, creating it (including the
138
+ * `Default/` subdirectory) if it does not already exist.
139
+ */
140
+ getOrCreatePersistentProfile() {
141
+ const profileDir = ProfileManager.PERSISTENT_PROFILE_DIR;
142
+ const defaultDir = path.join(profileDir, 'Default');
143
+ if (!fs.existsSync(profileDir)) {
144
+ fs.mkdirSync(profileDir, { recursive: true });
145
+ console.error(`[ProfileManager] Created persistent profile directory: ${profileDir}`);
146
+ }
147
+ if (!fs.existsSync(defaultDir)) {
148
+ fs.mkdirSync(defaultDir, { recursive: true });
149
+ }
150
+ return profileDir;
151
+ }
152
+ /**
153
+ * Determine whether the persistent profile needs a fresh cookie sync from
154
+ * `sourceDir`.
155
+ *
156
+ * Returns `true` when:
157
+ * - No sync metadata exists (never synced before), OR
158
+ * - The source Cookies file has changed since the last sync (different
159
+ * mtime or size), OR
160
+ * - The last sync is older than `COOKIE_FRESHNESS_MS`.
161
+ */
162
+ needsSync(sourceDir, profileSubdir = 'Default') {
163
+ const metadata = this.getSyncMetadata();
164
+ if (!metadata) {
165
+ return true; // Never synced
166
+ }
167
+ // Compute current hash of the source Cookies file
168
+ const sourceCookiesPath = path.join(sourceDir, profileSubdir, 'Cookies');
169
+ let currentHash;
170
+ try {
171
+ const stat = fs.statSync(sourceCookiesPath);
172
+ currentHash = `${stat.mtimeMs}:${stat.size}`;
173
+ }
174
+ catch {
175
+ // Cookies file doesn't exist in source — no sync possible
176
+ if (!metadata) {
177
+ console.error('[ProfileManager] Source Cookies not found and no prior sync — persistent profile will have no cookies');
178
+ }
179
+ return false;
180
+ }
181
+ if (currentHash !== metadata.sourceProfileHash) {
182
+ return true; // Source has changed
183
+ }
184
+ if (Date.now() - metadata.lastSyncTimestamp > ProfileManager.COOKIE_FRESHNESS_MS) {
185
+ return true; // Stale
186
+ }
187
+ return false;
188
+ }
189
+ /**
190
+ * Synchronise cookies, localStorage, IndexedDB, and Preferences from
191
+ * `sourceDir` into `destDir`.
192
+ *
193
+ * Uses the `sqlite3` CLI `.backup` command for an atomic, consistent
194
+ * snapshot of the Cookies database. Falls back to a plain file copy when
195
+ * `sqlite3` is not available.
196
+ *
197
+ * After a successful sync the metadata file is updated via
198
+ * `updateSyncMetadata`.
199
+ *
200
+ * @returns `{ atomic: true, success: true }` when sqlite3 backup was used,
201
+ * `{ atomic: false, success: true }` when the plain-copy fallback was used,
202
+ * `{ atomic: false, success: false }` when all methods failed.
203
+ */
204
+ syncProfileData(sourceDir, destDir, profileSubdir = 'Default') {
205
+ try {
206
+ const destDefault = path.join(destDir, profileSubdir);
207
+ fs.mkdirSync(destDefault, { recursive: true });
208
+ // --- 1. Copy Local State -----------------------------------------------
209
+ const localStateSrc = path.join(sourceDir, 'Local State');
210
+ if (fs.existsSync(localStateSrc)) {
211
+ fs.copyFileSync(localStateSrc, path.join(destDir, 'Local State'));
212
+ }
213
+ // --- 2. Sync Cookies (atomic via sqlite3, or plain copy fallback) ------
214
+ const sourceCookiesPath = path.join(sourceDir, profileSubdir, 'Cookies');
215
+ const destCookiesPath = path.join(destDefault, 'Cookies');
216
+ let atomic = false;
217
+ if (fs.existsSync(sourceCookiesPath)) {
218
+ const sqlite3Available = this._isSqlite3Available();
219
+ if (sqlite3Available) {
220
+ // Atomic backup using the SQLite .backup command.
221
+ // This works even when Chrome is actively writing to the DB.
222
+ // Uses execFileSync (no shell) to prevent injection via path characters.
223
+ if (process.platform === 'win32' && destCookiesPath.includes('"')) {
224
+ throw new Error('sqlite3 .backup: destination path contains \'"\', cannot quote safely on Windows');
225
+ }
226
+ const backupCmd = process.platform === 'win32'
227
+ ? `.backup "${destCookiesPath}"`
228
+ : `.backup '${destCookiesPath.replace(/'/g, "''")}'`;
229
+ (0, child_process_1.execFileSync)('sqlite3', [
230
+ sourceCookiesPath,
231
+ backupCmd,
232
+ ], { stdio: 'ignore', timeout: 10000 });
233
+ // .backup produces a clean WAL-checkpoint DB — remove stale WAL/SHM/journal
234
+ // at the destination so Chrome doesn't get confused.
235
+ for (const suffix of ['Cookies-wal', 'Cookies-shm', 'Cookies-journal']) {
236
+ const stale = path.join(destDefault, suffix);
237
+ if (fs.existsSync(stale)) {
238
+ try {
239
+ fs.unlinkSync(stale);
240
+ }
241
+ catch {
242
+ // Non-fatal
243
+ }
244
+ }
245
+ }
246
+ atomic = true;
247
+ }
248
+ else {
249
+ // sqlite3 not available — fall back to plain file copy (same as
250
+ // the legacy copyEssentialProfileData behaviour).
251
+ console.error('[ProfileManager] sqlite3 not found, falling back to non-atomic cookie copy');
252
+ const cookieFiles = [
253
+ 'Cookies',
254
+ 'Cookies-wal',
255
+ 'Cookies-shm',
256
+ 'Cookies-journal',
257
+ ];
258
+ for (const file of cookieFiles) {
259
+ const src = path.join(sourceDir, profileSubdir, file);
260
+ if (fs.existsSync(src)) {
261
+ try {
262
+ fs.copyFileSync(src, path.join(destDefault, file));
263
+ }
264
+ catch {
265
+ // Individual file copy failure is non-fatal
266
+ }
267
+ }
268
+ }
269
+ atomic = false;
270
+ }
271
+ }
272
+ // --- 2b. Copy Local Storage (LevelDB) ----------------------------------
273
+ const localStorageSrc = path.join(sourceDir, profileSubdir, 'Local Storage');
274
+ const localStorageDest = path.join(destDefault, 'Local Storage');
275
+ if (fs.existsSync(localStorageSrc)) {
276
+ try {
277
+ this._copyDirectoryRecursive(localStorageSrc, localStorageDest);
278
+ }
279
+ catch (err) {
280
+ console.error('[ProfileManager] Local Storage copy failed (non-fatal):', err);
281
+ }
282
+ }
283
+ // --- 2c. Copy IndexedDB -------------------------------------------------
284
+ const indexedDBSrc = path.join(sourceDir, profileSubdir, 'IndexedDB');
285
+ const indexedDBDest = path.join(destDefault, 'IndexedDB');
286
+ if (fs.existsSync(indexedDBSrc)) {
287
+ try {
288
+ this._copyDirectoryRecursive(indexedDBSrc, indexedDBDest);
289
+ }
290
+ catch (err) {
291
+ console.error('[ProfileManager] IndexedDB copy failed (non-fatal):', err);
292
+ }
293
+ }
294
+ // --- 3. Copy and patch Preferences ------------------------------------
295
+ const prefsSrc = path.join(sourceDir, profileSubdir, 'Preferences');
296
+ if (fs.existsSync(prefsSrc)) {
297
+ try {
298
+ const prefsContent = fs.readFileSync(prefsSrc, 'utf8');
299
+ const prefs = JSON.parse(prefsContent);
300
+ // Prevent "Chrome didn't shut down correctly" prompt
301
+ if (prefs.profile) {
302
+ prefs.profile.exit_type = 'Normal';
303
+ prefs.profile.exited_cleanly = true;
304
+ }
305
+ // Suppress session restore so copied profile doesn't reopen old tabs
306
+ if (!prefs.session)
307
+ prefs.session = {};
308
+ prefs.session.restore_on_startup = 5; // 5 = open new tab page
309
+ delete prefs.session.startup_urls;
310
+ fs.writeFileSync(path.join(destDefault, 'Preferences'), JSON.stringify(prefs));
311
+ }
312
+ catch {
313
+ // JSON parse failed — skip Preferences entirely.
314
+ // Chrome will create fresh defaults.
315
+ }
316
+ }
317
+ // --- 4. Update metadata -----------------------------------------------
318
+ this.updateSyncMetadata(sourceDir, profileSubdir);
319
+ console.error(`[ProfileManager] Profile data sync complete (atomic=${atomic}) from ${sourceDir} → ${destDir}`);
320
+ return { atomic, success: true };
321
+ }
322
+ catch (err) {
323
+ console.error('[ProfileManager] syncProfileData failed (non-fatal):', err);
324
+ return { atomic: false, success: false };
325
+ }
326
+ }
327
+ /**
328
+ * Read the current sync metadata from disk.
329
+ *
330
+ * @returns Parsed `SyncMetadata` or `null` if the file does not exist or
331
+ * cannot be parsed.
332
+ */
333
+ getSyncMetadata() {
334
+ try {
335
+ const raw = fs.readFileSync(ProfileManager.SYNC_METADATA_PATH, 'utf8');
336
+ return JSON.parse(raw);
337
+ }
338
+ catch {
339
+ return null;
340
+ }
341
+ }
342
+ /**
343
+ * Persist sync metadata for `sourceDir` using a temp-file + rename pattern
344
+ * to prevent corruption on concurrent writes.
345
+ */
346
+ updateSyncMetadata(sourceDir, profileSubdir = 'Default') {
347
+ try {
348
+ // Compute source hash
349
+ const sourceCookiesPath = path.join(sourceDir, profileSubdir, 'Cookies');
350
+ let sourceProfileHash = '';
351
+ try {
352
+ const stat = fs.statSync(sourceCookiesPath);
353
+ sourceProfileHash = `${stat.mtimeMs}:${stat.size}`;
354
+ }
355
+ catch {
356
+ // Cookies file missing — leave hash empty
357
+ }
358
+ const existing = this.getSyncMetadata();
359
+ const updated = {
360
+ lastSyncTimestamp: Date.now(),
361
+ sourceProfileHash,
362
+ syncCount: existing ? existing.syncCount + 1 : 1,
363
+ sourceProfileDir: sourceDir,
364
+ };
365
+ const metaPath = ProfileManager.SYNC_METADATA_PATH;
366
+ const metaDir = path.dirname(metaPath);
367
+ // Ensure parent directory exists
368
+ if (!fs.existsSync(metaDir)) {
369
+ fs.mkdirSync(metaDir, { recursive: true });
370
+ }
371
+ // Atomic write: write to temp file, then rename
372
+ const tmpPath = `${metaPath}.tmp-${Date.now()}`;
373
+ fs.writeFileSync(tmpPath, JSON.stringify(updated, null, 2), 'utf8');
374
+ fs.renameSync(tmpPath, metaPath);
375
+ }
376
+ catch (err) {
377
+ console.error('[ProfileManager] updateSyncMetadata failed (non-fatal):', err);
378
+ }
379
+ }
380
+ /**
381
+ * Determine which Chrome `userDataDir` to use and whether a cookie sync
382
+ * was performed.
383
+ *
384
+ * Priority order:
385
+ * 1. `explicitUserDataDir` — caller has specified an exact directory.
386
+ * 2. `useTempProfile` or `usingHeadlessShell` — create a fresh temp dir.
387
+ * 3. `realProfileDir` exists, **not** locked, and `isAutoLaunch` is false —
388
+ * use real profile directly.
389
+ * 4. `realProfileDir` exists and is **locked**, OR `isAutoLaunch` is true —
390
+ * use persistent profile, syncing cookies from the real profile when stale.
391
+ * 5. No `realProfileDir` — use persistent profile without a sync.
392
+ */
393
+ resolveProfile(options) {
394
+ const { realProfileDir, isProfileLocked, explicitUserDataDir, useTempProfile, usingHeadlessShell, profileDirectory, isAutoLaunch, } = options;
395
+ // 1. Explicit user-data-dir
396
+ if (explicitUserDataDir) {
397
+ return {
398
+ userDataDir: explicitUserDataDir,
399
+ profileType: 'explicit',
400
+ syncPerformed: false,
401
+ ...(profileDirectory && { profileDirectory }),
402
+ };
403
+ }
404
+ // 2. Temp profile requested or headless-shell (no profile support)
405
+ if (useTempProfile || usingHeadlessShell) {
406
+ const tempDir = path.join(os.tmpdir(), `openchrome-${Date.now()}`);
407
+ return {
408
+ userDataDir: tempDir,
409
+ profileType: 'temp',
410
+ syncPerformed: false,
411
+ ...(profileDirectory && { profileDirectory }),
412
+ };
413
+ }
414
+ // 3. Real profile available and NOT locked
415
+ // Skip when auto-launching: Chrome 136+ rejects --remote-debugging-port with the
416
+ // default --user-data-dir. Fall through to persistent profile with cookie sync.
417
+ if (realProfileDir && !isProfileLocked && !isAutoLaunch) {
418
+ return {
419
+ userDataDir: realProfileDir,
420
+ profileType: 'real',
421
+ syncPerformed: false,
422
+ ...(profileDirectory && { profileDirectory }),
423
+ };
424
+ }
425
+ // 4. Real profile exists but IS locked (or auto-launch) — use persistent profile
426
+ // When isAutoLaunch is true, Chrome 136+ requires a non-default --user-data-dir,
427
+ // so we use the persistent profile even when the real profile is not locked.
428
+ if (realProfileDir && (isProfileLocked || isAutoLaunch)) {
429
+ const persistentDir = this.getOrCreatePersistentProfile();
430
+ if (!this.needsSync(realProfileDir)) {
431
+ // Persistent profile is fresh — reuse without re-sync
432
+ return {
433
+ userDataDir: persistentDir,
434
+ profileType: 'persistent',
435
+ syncPerformed: false,
436
+ ...(profileDirectory && { profileDirectory }),
437
+ };
438
+ }
439
+ // Stale — sync profile data from real profile into persistent profile
440
+ const syncResult = this.syncProfileData(realProfileDir, persistentDir);
441
+ return {
442
+ userDataDir: persistentDir,
443
+ profileType: 'persistent',
444
+ syncPerformed: syncResult.atomic || syncResult.success,
445
+ ...(profileDirectory && { profileDirectory }),
446
+ };
447
+ }
448
+ // 5. No real profile at all — use persistent profile (no sync needed)
449
+ const persistentDir = this.getOrCreatePersistentProfile();
450
+ return {
451
+ userDataDir: persistentDir,
452
+ profileType: 'persistent',
453
+ syncPerformed: false,
454
+ ...(profileDirectory && { profileDirectory }),
455
+ };
456
+ }
457
+ /**
458
+ * Remove stale lock files from a profile directory.
459
+ * Called before launching Chrome with the persistent profile to prevent
460
+ * degraded state after a previous force-kill (oc_stop).
461
+ *
462
+ * Lock files cleaned:
463
+ * - SingletonLock, SingletonSocket, SingletonCookie (Unix)
464
+ * - lockfile (Windows)
465
+ *
466
+ * Also patches Preferences to prevent "Chrome didn't shut down correctly" prompt.
467
+ */
468
+ cleanStaleLocks(profileDir, profileSubdir = 'Default') {
469
+ const lockFiles = [
470
+ 'SingletonLock',
471
+ 'SingletonSocket',
472
+ 'SingletonCookie',
473
+ 'lockfile',
474
+ ];
475
+ for (const lockName of lockFiles) {
476
+ const lockPath = path.join(profileDir, lockName);
477
+ try {
478
+ fs.lstatSync(lockPath);
479
+ }
480
+ catch {
481
+ // File doesn't exist — nothing to clean
482
+ continue;
483
+ }
484
+ try {
485
+ fs.unlinkSync(lockPath);
486
+ console.error(`[ProfileManager] Removed stale lock: ${lockPath}`);
487
+ }
488
+ catch (err) {
489
+ console.error(`[ProfileManager] Failed to remove stale lock ${lockPath}: ${err}`);
490
+ }
491
+ }
492
+ // Patch Preferences to prevent "Chrome didn't shut down correctly" restore prompt
493
+ this.patchPreferencesExitType(profileDir, profileSubdir);
494
+ }
495
+ // -------------------------------------------------------------------------
496
+ // Private helpers
497
+ // -------------------------------------------------------------------------
498
+ /**
499
+ * Patch exit_type in the Default profile's Preferences file to prevent
500
+ * Chrome's "restore pages" prompt which can block headless operation.
501
+ */
502
+ patchPreferencesExitType(profileDir, profileSubdir = 'Default') {
503
+ const prefsPath = path.join(profileDir, profileSubdir, 'Preferences');
504
+ try {
505
+ if (!fs.existsSync(prefsPath))
506
+ return;
507
+ const raw = fs.readFileSync(prefsPath, 'utf8');
508
+ const prefs = JSON.parse(raw);
509
+ if (!prefs.profile)
510
+ prefs.profile = {};
511
+ prefs.profile.exit_type = 'Normal';
512
+ prefs.profile.exited_cleanly = true;
513
+ // Suppress session restore
514
+ if (!prefs.session)
515
+ prefs.session = {};
516
+ prefs.session.restore_on_startup = 5;
517
+ delete prefs.session.startup_urls;
518
+ // Remove HMAC checksums so Chrome regenerates them on next write,
519
+ // otherwise Chrome silently resets patched values to defaults.
520
+ delete prefs.protection_macs;
521
+ fs.writeFileSync(prefsPath, JSON.stringify(prefs));
522
+ console.error('[ProfileManager] Patched Preferences: exit_type=Normal');
523
+ }
524
+ catch {
525
+ // Parse or write failed — non-fatal, Chrome will create fresh defaults
526
+ }
527
+ }
528
+ /**
529
+ * Recursively copy a directory. Overwrites existing files.
530
+ * Used for copying Local Storage (LevelDB) and IndexedDB directories.
531
+ */
532
+ _copyDirectoryRecursive(src, dest) {
533
+ fs.mkdirSync(dest, { recursive: true });
534
+ const entries = fs.readdirSync(src, { withFileTypes: true });
535
+ for (const entry of entries) {
536
+ const srcPath = path.join(src, entry.name);
537
+ const destPath = path.join(dest, entry.name);
538
+ if (entry.isDirectory()) {
539
+ this._copyDirectoryRecursive(srcPath, destPath);
540
+ }
541
+ else {
542
+ fs.copyFileSync(srcPath, destPath);
543
+ }
544
+ }
545
+ }
546
+ /** Check whether the `sqlite3` CLI is available on PATH. */
547
+ _isSqlite3Available() {
548
+ try {
549
+ (0, child_process_1.execFileSync)(os.platform() === 'win32' ? 'where' : 'which', ['sqlite3'], { stdio: 'ignore', timeout: 3000 });
550
+ return true;
551
+ }
552
+ catch {
553
+ return false;
554
+ }
555
+ }
556
+ }
557
+ exports.ProfileManager = ProfileManager;
558
+ //# sourceMappingURL=profile-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-manager.js","sourceRoot":"","sources":["../../src/chrome/profile-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Claude Session - Standalone wrapper for running Claude Code in isolated environments
4
+ *
5
+ * Usage:
6
+ * claude-session [claude-args...] - Start Claude Code with isolated config
7
+ * claude-session --list - List active sessions
8
+ * claude-session --cleanup - Clean up stale sessions
9
+ * claude-session --recover - Recover corrupted .claude.json
10
+ */
11
+ export {};