@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,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenChromeTimeoutError = void 0;
4
+ exports.isTimeoutError = isTimeoutError;
5
+ /**
6
+ * Typed timeout error for OpenChrome.
7
+ * Replaces fragile string-based timeout detection across the codebase.
8
+ */
9
+ class OpenChromeTimeoutError extends Error {
10
+ /** Whether the operation may have produced useful partial state (e.g., partial DOM load). */
11
+ recoverable;
12
+ /** Original operation label for diagnostics. */
13
+ label;
14
+ /** Timeout duration in milliseconds. */
15
+ timeoutMs;
16
+ constructor(label, timeoutMs, recoverable = false) {
17
+ super(`${label} timed out after ${timeoutMs}ms`);
18
+ Object.setPrototypeOf(this, new.target.prototype);
19
+ this.name = 'OpenChromeTimeoutError';
20
+ this.label = label;
21
+ this.timeoutMs = timeoutMs;
22
+ this.recoverable = recoverable;
23
+ }
24
+ }
25
+ exports.OpenChromeTimeoutError = OpenChromeTimeoutError;
26
+ /**
27
+ * Type guard for timeout errors. Checks for:
28
+ * 1. OpenChromeTimeoutError instances (preferred)
29
+ * 2. Legacy string-based patterns including Puppeteer's "Waiting failed: Xms exceeded"
30
+ */
31
+ function isTimeoutError(error) {
32
+ if (error instanceof OpenChromeTimeoutError)
33
+ return true;
34
+ if (error instanceof Error) {
35
+ const msg = error.message.toLowerCase();
36
+ return (msg.includes('timed out') ||
37
+ /waiting failed:.*exceeded/i.test(error.message));
38
+ }
39
+ return false;
40
+ }
41
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/errors/timeout.ts"],"names":[],"mappings":";;;AA2BA,wCAUC;AArCD;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IAC/C,6FAA6F;IACpF,WAAW,CAAU;IAC9B,gDAAgD;IACvC,KAAK,CAAS;IACvB,wCAAwC;IAC/B,SAAS,CAAS;IAE3B,YAAY,KAAa,EAAE,SAAiB,EAAE,WAAW,GAAG,KAAK;QAC/D,KAAK,CAAC,GAAG,KAAK,oBAAoB,SAAS,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAhBD,wDAgBC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,sBAAsB;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzB,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * HintEngine — evaluates rules against tool results to produce proactive hints.
3
+ *
4
+ * Rules are sorted by priority (lower = higher priority) and evaluated first-match-wins.
5
+ * Uses ActivityTracker's recent calls for sequence/pattern detection.
6
+ * Integrates PatternLearner for adaptive error→recovery learning.
7
+ *
8
+ * Escalation system (issue #71):
9
+ * - Fire count 1-2: info severity (original hint text)
10
+ * - Fire count 3-4: warning severity (⚠️ WARNING prefix)
11
+ * - Fire count 5+: critical severity (🛑 CRITICAL prefix + action history)
12
+ * Fire counts accumulate per rule across the session and never reset.
13
+ */
14
+ import type { ToolCallEvent } from '../dashboard/types';
15
+ import type { ActivityTracker } from '../dashboard/activity-tracker';
16
+ import { PatternLearner } from './pattern-learner';
17
+ import { ProgressTracker } from './progress-tracker.js';
18
+ export interface HintContext {
19
+ toolName: string;
20
+ resultText: string;
21
+ isError: boolean;
22
+ recentCalls: ToolCallEvent[];
23
+ fireCounts: Map<string, number>;
24
+ }
25
+ export interface HintRule {
26
+ name: string;
27
+ priority: number;
28
+ maxSeverity?: HintSeverity;
29
+ match(ctx: HintContext): string | null;
30
+ }
31
+ export type HintSeverity = 'info' | 'warning' | 'critical';
32
+ export interface HintLogEntry {
33
+ timestamp: number;
34
+ toolName: string;
35
+ isError: boolean;
36
+ matchedRule: string | null;
37
+ hint: string | null;
38
+ severity: HintSeverity | null;
39
+ fireCount: number;
40
+ }
41
+ export interface HintResult {
42
+ severity: HintSeverity;
43
+ rule: string;
44
+ fireCount: number;
45
+ hint: string;
46
+ rawHint: string;
47
+ suggestion?: {
48
+ tool?: string;
49
+ reason: string;
50
+ };
51
+ context?: {
52
+ element?: string;
53
+ coordinates?: string;
54
+ ref?: string;
55
+ };
56
+ }
57
+ export declare class HintEngine {
58
+ private rules;
59
+ private activityTracker;
60
+ private learner;
61
+ private progressTracker;
62
+ private logFilePath;
63
+ private hintEscalation;
64
+ private missCounts;
65
+ private logStream;
66
+ private logBuffer;
67
+ private flushTimer;
68
+ private static readonly FLUSH_INTERVAL;
69
+ constructor(activityTracker: ActivityTracker, progressTracker?: ProgressTracker);
70
+ /**
71
+ * Enable hit/miss logging to a JSONL file for data collection.
72
+ */
73
+ enableLogging(dirPath: string): void;
74
+ /**
75
+ * Enable adaptive learning — load existing patterns and persist new ones.
76
+ */
77
+ enableLearning(dirPath: string): void;
78
+ /**
79
+ * Evaluate rules and return the first matching structured hint, or null.
80
+ * Also feeds the learner for adaptive pattern detection.
81
+ *
82
+ * Returns HintResult with escalating severity based on per-rule fire count:
83
+ * - 1-2 firings: info (original hint text)
84
+ * - 3-4 firings: warning (⚠️ WARNING prefix)
85
+ * - 5+ firings: critical (🛑 CRITICAL prefix + action history)
86
+ */
87
+ getHint(toolName: string, result: Record<string, unknown>, isError: boolean, sessionId?: string): HintResult | null;
88
+ private getSeverity;
89
+ private formatHintMessage;
90
+ private extractContext;
91
+ private extractSuggestion;
92
+ /**
93
+ * Extract text content from an MCPResult for pattern matching.
94
+ */
95
+ private extractText;
96
+ /**
97
+ * Write a log entry via buffered async stream (best-effort, non-blocking).
98
+ */
99
+ private log;
100
+ /**
101
+ * Flush buffered log entries to the write stream.
102
+ */
103
+ private flushBuffer;
104
+ /**
105
+ * Flush pending writes and close the log stream. Call on shutdown.
106
+ */
107
+ destroy(): void;
108
+ /**
109
+ * Get all registered rules (for testing).
110
+ */
111
+ getRules(): HintRule[];
112
+ /**
113
+ * Get the pattern learner (for testing).
114
+ */
115
+ getLearner(): PatternLearner;
116
+ }
117
+ //# sourceMappingURL=hint-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-engine.d.ts","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,347 @@
1
+ "use strict";
2
+ /**
3
+ * HintEngine — evaluates rules against tool results to produce proactive hints.
4
+ *
5
+ * Rules are sorted by priority (lower = higher priority) and evaluated first-match-wins.
6
+ * Uses ActivityTracker's recent calls for sequence/pattern detection.
7
+ * Integrates PatternLearner for adaptive error→recovery learning.
8
+ *
9
+ * Escalation system (issue #71):
10
+ * - Fire count 1-2: info severity (original hint text)
11
+ * - Fire count 3-4: warning severity (⚠️ WARNING prefix)
12
+ * - Fire count 5+: critical severity (🛑 CRITICAL prefix + action history)
13
+ * Fire counts accumulate per rule across the session and never reset.
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.HintEngine = void 0;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const pattern_learner_1 = require("./pattern-learner");
53
+ const progress_tracker_js_1 = require("./progress-tracker.js");
54
+ const error_recovery_1 = require("./rules/error-recovery");
55
+ const blocking_page_1 = require("./rules/blocking-page");
56
+ const composite_suggestions_1 = require("./rules/composite-suggestions");
57
+ const sequence_detection_1 = require("./rules/sequence-detection");
58
+ const repetition_detection_1 = require("./rules/repetition-detection");
59
+ const pagination_detection_1 = require("./rules/pagination-detection");
60
+ const learned_rules_1 = require("./rules/learned-rules");
61
+ const success_hints_1 = require("./rules/success-hints");
62
+ const setup_hints_1 = require("./rules/setup-hints");
63
+ class HintEngine {
64
+ rules;
65
+ activityTracker;
66
+ learner;
67
+ progressTracker;
68
+ logFilePath = null;
69
+ hintEscalation = new Map(); // ruleName -> session fire count
70
+ missCounts = new Map(); // ruleName -> consecutive miss count
71
+ // Buffered async write stream
72
+ logStream = null;
73
+ logBuffer = [];
74
+ flushTimer = null;
75
+ static FLUSH_INTERVAL = 200; // ms
76
+ constructor(activityTracker, progressTracker) {
77
+ this.activityTracker = activityTracker;
78
+ this.progressTracker = progressTracker ?? new progress_tracker_js_1.ProgressTracker();
79
+ this.learner = new pattern_learner_1.PatternLearner();
80
+ // Collect all rules and sort by priority (ascending = highest priority first)
81
+ // Learned rules (350) sit between repetition (250) and success hints (400)
82
+ this.rules = [
83
+ ...setup_hints_1.setupHintRules, // priority 90
84
+ ...error_recovery_1.errorRecoveryRules, // priority 100-108
85
+ ...blocking_page_1.blockingPageRules, // priority 120-122
86
+ ...pagination_detection_1.paginationDetectionRules, // priority 190-192
87
+ ...composite_suggestions_1.compositeSuggestionRules, // priority 200-203
88
+ ...repetition_detection_1.repetitionDetectionRules, // priority 245-252
89
+ ...sequence_detection_1.sequenceDetectionRules, // priority 300-304
90
+ ...(0, learned_rules_1.createLearnedRules)(this.learner), // priority 350
91
+ ...success_hints_1.successHintRules, // priority 400-403
92
+ ].sort((a, b) => a.priority - b.priority);
93
+ // Flush remaining buffer on process exit
94
+ process.on('exit', () => {
95
+ this.flushBuffer();
96
+ });
97
+ }
98
+ /**
99
+ * Enable hit/miss logging to a JSONL file for data collection.
100
+ */
101
+ enableLogging(dirPath) {
102
+ try {
103
+ fs.mkdirSync(dirPath, { recursive: true });
104
+ this.logFilePath = path.join(dirPath, `hints-${new Date().toISOString().slice(0, 10)}.jsonl`);
105
+ this.logStream = fs.createWriteStream(this.logFilePath, { flags: 'a' });
106
+ }
107
+ catch {
108
+ // Best-effort logging
109
+ }
110
+ }
111
+ /**
112
+ * Enable adaptive learning — load existing patterns and persist new ones.
113
+ */
114
+ enableLearning(dirPath) {
115
+ this.learner.enablePersistence(dirPath);
116
+ }
117
+ /**
118
+ * Evaluate rules and return the first matching structured hint, or null.
119
+ * Also feeds the learner for adaptive pattern detection.
120
+ *
121
+ * Returns HintResult with escalating severity based on per-rule fire count:
122
+ * - 1-2 firings: info (original hint text)
123
+ * - 3-4 firings: warning (⚠️ WARNING prefix)
124
+ * - 5+ firings: critical (🛑 CRITICAL prefix + action history)
125
+ */
126
+ getHint(toolName, result, isError, sessionId) {
127
+ const resultText = this.extractText(result);
128
+ const recentCalls = this.activityTracker.getRecentCalls(5, sessionId);
129
+ // Priority 50: Progress tracking (highest priority, runs before all rules)
130
+ // NOTE: ProgressTracker returns early before the rule loop. Miss-count decay
131
+ // for individual rules is intentionally frozen during stuck/stalling phases —
132
+ // we don't want to spuriously reset escalating rule fire counts while the
133
+ // agent is not making progress.
134
+ const status = this.progressTracker.evaluate(recentCalls, toolName, resultText, isError);
135
+ // Scope escalation keys by sessionId when available to prevent cross-session pollution
136
+ const escalationKey = (ruleName) => sessionId !== undefined ? `${sessionId}:${ruleName}` : ruleName;
137
+ if (status === 'stuck') {
138
+ const key = escalationKey('progress-tracker-stuck');
139
+ const fireCount = (this.hintEscalation.get(key) || 0) + 1;
140
+ this.hintEscalation.set(key, fireCount);
141
+ const rawHintText = 'STOP — you are stuck. The last several tool calls made no meaningful progress ' +
142
+ '(errors, stale refs, auth redirects, or timeouts). ' +
143
+ 'Step back and try a completely different approach, or ask the user for help.';
144
+ const severity = fireCount >= 2 ? 'critical' : 'warning';
145
+ this.log({ timestamp: Date.now(), toolName, isError, matchedRule: 'progress-tracker-stuck', hint: rawHintText, severity, fireCount });
146
+ return {
147
+ severity,
148
+ rule: 'progress-tracker-stuck',
149
+ fireCount,
150
+ hint: this.formatHintMessage(severity, rawHintText, fireCount),
151
+ rawHint: rawHintText,
152
+ };
153
+ }
154
+ if (status === 'stalling') {
155
+ const key = escalationKey('progress-tracker-stalling');
156
+ const fireCount = (this.hintEscalation.get(key) || 0) + 1;
157
+ this.hintEscalation.set(key, fireCount);
158
+ const rawHintText = 'Warning: recent tool calls are not making progress. ' +
159
+ 'Consider trying a different approach before getting stuck.';
160
+ const severity = this.getSeverity(fireCount);
161
+ this.log({ timestamp: Date.now(), toolName, isError, matchedRule: 'progress-tracker-stalling', hint: rawHintText, severity, fireCount });
162
+ return {
163
+ severity,
164
+ rule: 'progress-tracker-stalling',
165
+ fireCount,
166
+ hint: this.formatHintMessage(severity, rawHintText, fireCount),
167
+ rawHint: rawHintText,
168
+ };
169
+ }
170
+ const ctx = { toolName, resultText, isError, recentCalls, fireCounts: this.hintEscalation };
171
+ let matchedRule = null;
172
+ let rawHint = null;
173
+ let matchedMaxSeverity;
174
+ for (const rule of this.rules) {
175
+ const h = rule.match(ctx);
176
+ if (h) {
177
+ matchedRule = rule.name;
178
+ rawHint = h;
179
+ matchedMaxSeverity = rule.maxSeverity;
180
+ // Reset miss count on match
181
+ this.missCounts.set(rule.name, 0);
182
+ break;
183
+ }
184
+ else {
185
+ // Increment miss count; after 10 consecutive misses, decay fire count to 0
186
+ const misses = (this.missCounts.get(rule.name) || 0) + 1;
187
+ this.missCounts.set(rule.name, misses);
188
+ if (misses >= 10) {
189
+ this.hintEscalation.set(escalationKey(rule.name), 0);
190
+ this.missCounts.set(rule.name, 0);
191
+ }
192
+ }
193
+ }
194
+ if (!rawHint || !matchedRule) {
195
+ // Feed the learner even on miss
196
+ this.learner.onToolComplete(toolName, isError);
197
+ if (isError) {
198
+ this.learner.onMiss(toolName, resultText);
199
+ }
200
+ this.log({ timestamp: Date.now(), toolName, isError, matchedRule: null, hint: null, severity: null, fireCount: 0 });
201
+ return null;
202
+ }
203
+ // Track fire count per rule, scoped by sessionId when available
204
+ const matchedKey = escalationKey(matchedRule);
205
+ const fireCount = (this.hintEscalation.get(matchedKey) || 0) + 1;
206
+ this.hintEscalation.set(matchedKey, fireCount);
207
+ const severity = this.getSeverity(fireCount, matchedMaxSeverity);
208
+ let formattedHint = this.formatHintMessage(severity, rawHint, fireCount);
209
+ // Context-aware: extract element/coordinate info from result
210
+ const context = this.extractContext(resultText);
211
+ // For critical hints (5+), add action history to force strategy change
212
+ if (severity === 'critical') {
213
+ const recentTools = recentCalls.slice(0, 5).map(c => c.toolName);
214
+ const toolCounts = recentTools.reduce((acc, t) => { acc[t] = (acc[t] || 0) + 1; return acc; }, {});
215
+ const summary = Object.entries(toolCounts).map(([t, c]) => `${t}×${c}`).join(', ');
216
+ formattedHint += ` Previous actions: [${summary}].`;
217
+ if (context?.coordinates) {
218
+ formattedHint += ` Last coordinates: ${context.coordinates}.`;
219
+ }
220
+ if (context?.element) {
221
+ formattedHint += ` Hit element: ${context.element}.`;
222
+ }
223
+ }
224
+ const suggestion = this.extractSuggestion(rawHint);
225
+ const hintResult = {
226
+ severity,
227
+ rule: matchedRule,
228
+ fireCount,
229
+ hint: formattedHint,
230
+ rawHint,
231
+ ...(suggestion && { suggestion }),
232
+ ...(context && { context }),
233
+ };
234
+ // Feed the learner
235
+ this.learner.onToolComplete(toolName, isError);
236
+ this.log({ timestamp: Date.now(), toolName, isError, matchedRule, hint: formattedHint, severity, fireCount });
237
+ return hintResult;
238
+ }
239
+ getSeverity(fireCount, maxSeverity) {
240
+ const raw = fireCount <= 2 ? 'info' : fireCount <= 4 ? 'warning' : 'critical';
241
+ if (!maxSeverity)
242
+ return raw;
243
+ const order = ['info', 'warning', 'critical'];
244
+ return order.indexOf(raw) <= order.indexOf(maxSeverity) ? raw : maxSeverity;
245
+ }
246
+ formatHintMessage(severity, rawHint, fireCount) {
247
+ switch (severity) {
248
+ case 'info':
249
+ return rawHint; // Keep original text (already has "Hint:" prefix from rules)
250
+ case 'warning':
251
+ return `⚠️ WARNING (${fireCount}x): ${rawHint}`;
252
+ case 'critical':
253
+ return `🛑 CRITICAL (${fireCount}x — you MUST change approach): ${rawHint}`;
254
+ }
255
+ }
256
+ extractContext(resultText) {
257
+ const context = {};
258
+ // Extract coordinates from "Clicked at (X, Y)" or "(X,Y)" patterns
259
+ const coordMatch = resultText.match(/\((\d+),\s*(\d+)\)/);
260
+ if (coordMatch)
261
+ context.coordinates = `(${coordMatch[1]}, ${coordMatch[2]})`;
262
+ // Extract element info from "Hit: ..." line
263
+ const hitMatch = resultText.match(/Hit:\s*(.+?)(?:\n|$)/);
264
+ if (hitMatch)
265
+ context.element = hitMatch[1].trim();
266
+ // Extract ref ID
267
+ const refMatch = resultText.match(/ref[_=]["']?(\w+)/i);
268
+ if (refMatch)
269
+ context.ref = refMatch[1];
270
+ return Object.keys(context).length > 0 ? context : undefined;
271
+ }
272
+ extractSuggestion(rawHint) {
273
+ // Extract tool name from common patterns like "Use X", "Try X", "Prefer X"
274
+ const toolMatch = rawHint.match(/\b(?:Use|Try|Prefer)\s+(\w+)(?:\(|[\s,.])/i);
275
+ if (toolMatch) {
276
+ return {
277
+ tool: toolMatch[1],
278
+ reason: rawHint,
279
+ };
280
+ }
281
+ return undefined;
282
+ }
283
+ /**
284
+ * Extract text content from an MCPResult for pattern matching.
285
+ */
286
+ extractText(result) {
287
+ const content = result.content;
288
+ if (!Array.isArray(content))
289
+ return JSON.stringify(result);
290
+ return content
291
+ .filter((c) => c.type === 'text')
292
+ .map((c) => c.text)
293
+ .join('\n');
294
+ }
295
+ /**
296
+ * Write a log entry via buffered async stream (best-effort, non-blocking).
297
+ */
298
+ log(entry) {
299
+ if (!this.logStream)
300
+ return;
301
+ this.logBuffer.push(JSON.stringify(entry) + '\n');
302
+ if (!this.flushTimer) {
303
+ this.flushTimer = setTimeout(() => {
304
+ this.flushBuffer();
305
+ }, HintEngine.FLUSH_INTERVAL);
306
+ }
307
+ }
308
+ /**
309
+ * Flush buffered log entries to the write stream.
310
+ */
311
+ flushBuffer() {
312
+ if (this.logBuffer.length > 0 && this.logStream) {
313
+ const data = this.logBuffer.join('');
314
+ this.logStream.write(data);
315
+ this.logBuffer = [];
316
+ }
317
+ this.flushTimer = null;
318
+ }
319
+ /**
320
+ * Flush pending writes and close the log stream. Call on shutdown.
321
+ */
322
+ destroy() {
323
+ this.flushBuffer();
324
+ if (this.logStream) {
325
+ this.logStream.end();
326
+ this.logStream = null;
327
+ }
328
+ if (this.flushTimer) {
329
+ clearTimeout(this.flushTimer);
330
+ this.flushTimer = null;
331
+ }
332
+ }
333
+ /**
334
+ * Get all registered rules (for testing).
335
+ */
336
+ getRules() {
337
+ return this.rules;
338
+ }
339
+ /**
340
+ * Get the pattern learner (for testing).
341
+ */
342
+ getLearner() {
343
+ return this.learner;
344
+ }
345
+ }
346
+ exports.HintEngine = HintEngine;
347
+ //# sourceMappingURL=hint-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-engine.js","sourceRoot":"","sources":["../../src/hints/hint-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Hints module — Proactive hint system
3
+ */
4
+ export { HintEngine } from './hint-engine';
5
+ export type { HintContext, HintRule, HintLogEntry, HintSeverity, HintResult } from './hint-engine';
6
+ export { PatternLearner } from './pattern-learner';
7
+ export type { LearnedPattern } from './pattern-learner';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hints/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Hints module — Proactive hint system
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PatternLearner = exports.HintEngine = void 0;
7
+ var hint_engine_1 = require("./hint-engine");
8
+ Object.defineProperty(exports, "HintEngine", { enumerable: true, get: function () { return hint_engine_1.HintEngine; } });
9
+ var pattern_learner_1 = require("./pattern-learner");
10
+ Object.defineProperty(exports, "PatternLearner", { enumerable: true, get: function () { return pattern_learner_1.PatternLearner; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hints/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAEnB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * PatternLearner — Adaptive memory system that learns error→recovery patterns.
3
+ *
4
+ * Flow:
5
+ * 1. Hint miss on error → start observing next 3 tool calls
6
+ * 2. If a different tool succeeds → record as recovery pattern
7
+ * 3. Same error→recovery seen N times → promote to learned rule
8
+ * 4. Persisted to JSON, survives across sessions
9
+ */
10
+ export interface LearnedPattern {
11
+ id: string;
12
+ errorFingerprint: string;
13
+ errorTools: string[];
14
+ recoveryTool: string;
15
+ occurrences: number;
16
+ confidence: number;
17
+ firstSeen: number;
18
+ lastSeen: number;
19
+ hint: string;
20
+ }
21
+ export declare class PatternLearner {
22
+ private pending;
23
+ private rawObservations;
24
+ private patterns;
25
+ private filePath;
26
+ private dirty;
27
+ static readonly WATCH_WINDOW = 3;
28
+ static readonly PROMOTE_THRESHOLD = 3;
29
+ static readonly CONFIDENCE_THRESHOLD = 0.6;
30
+ static readonly MAX_PENDING = 10;
31
+ /**
32
+ * Enable persistence — load existing patterns and save new ones.
33
+ */
34
+ enablePersistence(dirPath: string): void;
35
+ /**
36
+ * Called when a hint miss occurs on an error (no static rule matched).
37
+ * Starts observing subsequent calls to detect recovery pattern.
38
+ */
39
+ onMiss(toolName: string, errorText: string): void;
40
+ /**
41
+ * Called on every tool completion to observe potential recovery patterns.
42
+ */
43
+ onToolComplete(toolName: string, isError: boolean): void;
44
+ /**
45
+ * Record an observed error→recovery correlation.
46
+ */
47
+ private recordRecovery;
48
+ /**
49
+ * Check if a raw observation should be promoted to a learned pattern.
50
+ */
51
+ private tryPromote;
52
+ /**
53
+ * Match an error against learned patterns.
54
+ */
55
+ matchPattern(errorText: string, toolName: string): LearnedPattern | null;
56
+ /**
57
+ * Normalize error text for fingerprinting.
58
+ * Strips dynamic values (IDs, large numbers) to group similar errors.
59
+ */
60
+ normalizeError(text: string): string;
61
+ /**
62
+ * Get all learned patterns (for testing/inspection).
63
+ */
64
+ getPatterns(): LearnedPattern[];
65
+ /**
66
+ * Get pending observation count (for testing).
67
+ */
68
+ getPendingCount(): number;
69
+ static generateHint(recoveryTool: string, occurrences: number): string;
70
+ private load;
71
+ /**
72
+ * Persist learned patterns to disk.
73
+ */
74
+ save(): void;
75
+ }
76
+ //# sourceMappingURL=pattern-learner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-learner.d.ts","sourceRoot":"","sources":["../../src/hints/pattern-learner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAsBD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,KAAK,CAAS;IAEtB,MAAM,CAAC,QAAQ,CAAC,YAAY,KAAK;IACjC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,KAAK;IACtC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,OAAO;IAC3C,MAAM,CAAC,QAAQ,CAAC,WAAW,MAAM;IAEjC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUxC;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAiBjD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IA0BxD;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0ClB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAaxE;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAUpC;;OAEG;IACH,WAAW,IAAI,cAAc,EAAE;IAI/B;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAItE,OAAO,CAAC,IAAI;IAWZ;;OAEG;IACH,IAAI,IAAI,IAAI;CAgBb"}