claude-chrome-parallel 1.0.0

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +501 -0
  3. package/assets/demo.svg +278 -0
  4. package/dist/cdp/client.d.ts +218 -0
  5. package/dist/cdp/client.d.ts.map +1 -0
  6. package/dist/cdp/client.js +797 -0
  7. package/dist/cdp/client.js.map +1 -0
  8. package/dist/cdp/connection-pool.d.ts +125 -0
  9. package/dist/cdp/connection-pool.d.ts.map +1 -0
  10. package/dist/cdp/connection-pool.js +443 -0
  11. package/dist/cdp/connection-pool.js.map +1 -0
  12. package/dist/cdp/screenshot-scheduler.d.ts +54 -0
  13. package/dist/cdp/screenshot-scheduler.d.ts.map +1 -0
  14. package/dist/cdp/screenshot-scheduler.js +87 -0
  15. package/dist/cdp/screenshot-scheduler.js.map +1 -0
  16. package/dist/chrome/launcher.d.ts +55 -0
  17. package/dist/chrome/launcher.d.ts.map +1 -0
  18. package/dist/chrome/launcher.js +383 -0
  19. package/dist/chrome/launcher.js.map +1 -0
  20. package/dist/chrome/pool.d.ts +54 -0
  21. package/dist/chrome/pool.d.ts.map +1 -0
  22. package/dist/chrome/pool.js +301 -0
  23. package/dist/chrome/pool.js.map +1 -0
  24. package/dist/chrome/profile-detector.d.ts +52 -0
  25. package/dist/chrome/profile-detector.d.ts.map +1 -0
  26. package/dist/chrome/profile-detector.js +246 -0
  27. package/dist/chrome/profile-detector.js.map +1 -0
  28. package/dist/cli/claude-session.d.ts +11 -0
  29. package/dist/cli/claude-session.js +349 -0
  30. package/dist/cli/claude-session.js.map +1 -0
  31. package/dist/cli/index.d.ts +14 -0
  32. package/dist/cli/index.js +858 -0
  33. package/dist/cli/index.js.map +1 -0
  34. package/dist/cli/install.d.ts +16 -0
  35. package/dist/cli/install.js +185 -0
  36. package/dist/cli/install.js.map +1 -0
  37. package/dist/cli/uninstall.d.ts +7 -0
  38. package/dist/cli/uninstall.js +126 -0
  39. package/dist/cli/uninstall.js.map +1 -0
  40. package/dist/cli/update-check.d.ts +9 -0
  41. package/dist/cli/update-check.js +141 -0
  42. package/dist/cli/update-check.js.map +1 -0
  43. package/dist/config/config-recovery.d.ts +69 -0
  44. package/dist/config/config-recovery.d.ts.map +1 -0
  45. package/dist/config/config-recovery.js +302 -0
  46. package/dist/config/config-recovery.js.map +1 -0
  47. package/dist/config/global.d.ts +49 -0
  48. package/dist/config/global.d.ts.map +1 -0
  49. package/dist/config/global.js +24 -0
  50. package/dist/config/global.js.map +1 -0
  51. package/dist/config/index.d.ts +7 -0
  52. package/dist/config/index.d.ts.map +1 -0
  53. package/dist/config/index.js +23 -0
  54. package/dist/config/index.js.map +1 -0
  55. package/dist/config/session-isolator.d.ts +76 -0
  56. package/dist/config/session-isolator.d.ts.map +1 -0
  57. package/dist/config/session-isolator.js +268 -0
  58. package/dist/config/session-isolator.js.map +1 -0
  59. package/dist/dashboard/activity-tracker.d.ts +76 -0
  60. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  61. package/dist/dashboard/activity-tracker.js +219 -0
  62. package/dist/dashboard/activity-tracker.js.map +1 -0
  63. package/dist/dashboard/ansi.d.ts +117 -0
  64. package/dist/dashboard/ansi.d.ts.map +1 -0
  65. package/dist/dashboard/ansi.js +199 -0
  66. package/dist/dashboard/ansi.js.map +1 -0
  67. package/dist/dashboard/index.d.ts +110 -0
  68. package/dist/dashboard/index.d.ts.map +1 -0
  69. package/dist/dashboard/index.js +412 -0
  70. package/dist/dashboard/index.js.map +1 -0
  71. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  72. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  73. package/dist/dashboard/keyboard-handler.js +215 -0
  74. package/dist/dashboard/keyboard-handler.js.map +1 -0
  75. package/dist/dashboard/operation-controller.d.ts +76 -0
  76. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  77. package/dist/dashboard/operation-controller.js +167 -0
  78. package/dist/dashboard/operation-controller.js.map +1 -0
  79. package/dist/dashboard/renderer.d.ts +76 -0
  80. package/dist/dashboard/renderer.d.ts.map +1 -0
  81. package/dist/dashboard/renderer.js +193 -0
  82. package/dist/dashboard/renderer.js.map +1 -0
  83. package/dist/dashboard/types.d.ts +56 -0
  84. package/dist/dashboard/types.d.ts.map +1 -0
  85. package/dist/dashboard/types.js +12 -0
  86. package/dist/dashboard/types.js.map +1 -0
  87. package/dist/dashboard/views/main-view.d.ts +23 -0
  88. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  89. package/dist/dashboard/views/main-view.js +143 -0
  90. package/dist/dashboard/views/main-view.js.map +1 -0
  91. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  92. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  93. package/dist/dashboard/views/sessions-view.js +104 -0
  94. package/dist/dashboard/views/sessions-view.js.map +1 -0
  95. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  96. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  97. package/dist/dashboard/views/tabs-view.js +92 -0
  98. package/dist/dashboard/views/tabs-view.js.map +1 -0
  99. package/dist/hints/hint-engine.d.ts +77 -0
  100. package/dist/hints/hint-engine.d.ts.map +1 -0
  101. package/dist/hints/hint-engine.js +191 -0
  102. package/dist/hints/hint-engine.js.map +1 -0
  103. package/dist/hints/index.d.ts +8 -0
  104. package/dist/hints/index.d.ts.map +1 -0
  105. package/dist/hints/index.js +11 -0
  106. package/dist/hints/index.js.map +1 -0
  107. package/dist/hints/pattern-learner.d.ts +76 -0
  108. package/dist/hints/pattern-learner.d.ts.map +1 -0
  109. package/dist/hints/pattern-learner.js +254 -0
  110. package/dist/hints/pattern-learner.js.map +1 -0
  111. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  112. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  113. package/dist/hints/rules/composite-suggestions.js +66 -0
  114. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  115. package/dist/hints/rules/error-recovery.d.ts +7 -0
  116. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  117. package/dist/hints/rules/error-recovery.js +55 -0
  118. package/dist/hints/rules/error-recovery.js.map +1 -0
  119. package/dist/hints/rules/learned-rules.d.ts +13 -0
  120. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  121. package/dist/hints/rules/learned-rules.js +27 -0
  122. package/dist/hints/rules/learned-rules.js.map +1 -0
  123. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  124. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  125. package/dist/hints/rules/repetition-detection.js +82 -0
  126. package/dist/hints/rules/repetition-detection.js.map +1 -0
  127. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  128. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  129. package/dist/hints/rules/sequence-detection.js +89 -0
  130. package/dist/hints/rules/sequence-detection.js.map +1 -0
  131. package/dist/hints/rules/success-hints.d.ts +6 -0
  132. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  133. package/dist/hints/rules/success-hints.js +62 -0
  134. package/dist/hints/rules/success-hints.js.map +1 -0
  135. package/dist/index.d.ts +10 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +272 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/lightpanda/launcher.d.ts +58 -0
  140. package/dist/lightpanda/launcher.d.ts.map +1 -0
  141. package/dist/lightpanda/launcher.js +199 -0
  142. package/dist/lightpanda/launcher.js.map +1 -0
  143. package/dist/mcp-server.d.ts +129 -0
  144. package/dist/mcp-server.d.ts.map +1 -0
  145. package/dist/mcp-server.js +641 -0
  146. package/dist/mcp-server.js.map +1 -0
  147. package/dist/memory/domain-memory.d.ts +68 -0
  148. package/dist/memory/domain-memory.d.ts.map +1 -0
  149. package/dist/memory/domain-memory.js +227 -0
  150. package/dist/memory/domain-memory.js.map +1 -0
  151. package/dist/orchestration/plan-executor.d.ts +19 -0
  152. package/dist/orchestration/plan-executor.d.ts.map +1 -0
  153. package/dist/orchestration/plan-executor.js +284 -0
  154. package/dist/orchestration/plan-executor.js.map +1 -0
  155. package/dist/orchestration/plan-registry.d.ts +55 -0
  156. package/dist/orchestration/plan-registry.d.ts.map +1 -0
  157. package/dist/orchestration/plan-registry.js +255 -0
  158. package/dist/orchestration/plan-registry.js.map +1 -0
  159. package/dist/orchestration/state-manager.d.ts +127 -0
  160. package/dist/orchestration/state-manager.d.ts.map +1 -0
  161. package/dist/orchestration/state-manager.js +438 -0
  162. package/dist/orchestration/state-manager.js.map +1 -0
  163. package/dist/orchestration/workflow-engine.d.ts +162 -0
  164. package/dist/orchestration/workflow-engine.d.ts.map +1 -0
  165. package/dist/orchestration/workflow-engine.js +731 -0
  166. package/dist/orchestration/workflow-engine.js.map +1 -0
  167. package/dist/resources/usage-guide.d.ts +13 -0
  168. package/dist/resources/usage-guide.d.ts.map +1 -0
  169. package/dist/resources/usage-guide.js +101 -0
  170. package/dist/resources/usage-guide.js.map +1 -0
  171. package/dist/router/browser-router.d.ts +51 -0
  172. package/dist/router/browser-router.d.ts.map +1 -0
  173. package/dist/router/browser-router.js +178 -0
  174. package/dist/router/browser-router.js.map +1 -0
  175. package/dist/router/cookie-sync.d.ts +48 -0
  176. package/dist/router/cookie-sync.d.ts.map +1 -0
  177. package/dist/router/cookie-sync.js +106 -0
  178. package/dist/router/cookie-sync.js.map +1 -0
  179. package/dist/router/index.d.ts +5 -0
  180. package/dist/router/index.d.ts.map +1 -0
  181. package/dist/router/index.js +10 -0
  182. package/dist/router/index.js.map +1 -0
  183. package/dist/router/tool-routing-registry.d.ts +21 -0
  184. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  185. package/dist/router/tool-routing-registry.js +90 -0
  186. package/dist/router/tool-routing-registry.js.map +1 -0
  187. package/dist/session-manager.d.ts +251 -0
  188. package/dist/session-manager.d.ts.map +1 -0
  189. package/dist/session-manager.js +912 -0
  190. package/dist/session-manager.js.map +1 -0
  191. package/dist/tools/batch-execute.d.ts +11 -0
  192. package/dist/tools/batch-execute.d.ts.map +1 -0
  193. package/dist/tools/batch-execute.js +226 -0
  194. package/dist/tools/batch-execute.js.map +1 -0
  195. package/dist/tools/click-element.d.ts +8 -0
  196. package/dist/tools/click-element.d.ts.map +1 -0
  197. package/dist/tools/click-element.js +455 -0
  198. package/dist/tools/click-element.js.map +1 -0
  199. package/dist/tools/computer.d.ts +6 -0
  200. package/dist/tools/computer.d.ts.map +1 -0
  201. package/dist/tools/computer.js +638 -0
  202. package/dist/tools/computer.js.map +1 -0
  203. package/dist/tools/console-capture.d.ts +6 -0
  204. package/dist/tools/console-capture.d.ts.map +1 -0
  205. package/dist/tools/console-capture.js +320 -0
  206. package/dist/tools/console-capture.js.map +1 -0
  207. package/dist/tools/cookies.d.ts +6 -0
  208. package/dist/tools/cookies.d.ts.map +1 -0
  209. package/dist/tools/cookies.js +263 -0
  210. package/dist/tools/cookies.js.map +1 -0
  211. package/dist/tools/drag-drop.d.ts +6 -0
  212. package/dist/tools/drag-drop.d.ts.map +1 -0
  213. package/dist/tools/drag-drop.js +252 -0
  214. package/dist/tools/drag-drop.js.map +1 -0
  215. package/dist/tools/emulate-device.d.ts +6 -0
  216. package/dist/tools/emulate-device.d.ts.map +1 -0
  217. package/dist/tools/emulate-device.js +221 -0
  218. package/dist/tools/emulate-device.js.map +1 -0
  219. package/dist/tools/file-upload.d.ts +6 -0
  220. package/dist/tools/file-upload.d.ts.map +1 -0
  221. package/dist/tools/file-upload.js +208 -0
  222. package/dist/tools/file-upload.js.map +1 -0
  223. package/dist/tools/fill-form.d.ts +8 -0
  224. package/dist/tools/fill-form.d.ts.map +1 -0
  225. package/dist/tools/fill-form.js +342 -0
  226. package/dist/tools/fill-form.js.map +1 -0
  227. package/dist/tools/find.d.ts +6 -0
  228. package/dist/tools/find.d.ts.map +1 -0
  229. package/dist/tools/find.js +330 -0
  230. package/dist/tools/find.js.map +1 -0
  231. package/dist/tools/form-input.d.ts +6 -0
  232. package/dist/tools/form-input.d.ts.map +1 -0
  233. package/dist/tools/form-input.js +181 -0
  234. package/dist/tools/form-input.js.map +1 -0
  235. package/dist/tools/geolocation.d.ts +6 -0
  236. package/dist/tools/geolocation.d.ts.map +1 -0
  237. package/dist/tools/geolocation.js +172 -0
  238. package/dist/tools/geolocation.js.map +1 -0
  239. package/dist/tools/http-auth.d.ts +6 -0
  240. package/dist/tools/http-auth.d.ts.map +1 -0
  241. package/dist/tools/http-auth.js +136 -0
  242. package/dist/tools/http-auth.js.map +1 -0
  243. package/dist/tools/index.d.ts +6 -0
  244. package/dist/tools/index.d.ts.map +1 -0
  245. package/dist/tools/index.js +104 -0
  246. package/dist/tools/index.js.map +1 -0
  247. package/dist/tools/javascript.d.ts +6 -0
  248. package/dist/tools/javascript.d.ts.map +1 -0
  249. package/dist/tools/javascript.js +138 -0
  250. package/dist/tools/javascript.js.map +1 -0
  251. package/dist/tools/lightweight-scroll.d.ts +11 -0
  252. package/dist/tools/lightweight-scroll.d.ts.map +1 -0
  253. package/dist/tools/lightweight-scroll.js +266 -0
  254. package/dist/tools/lightweight-scroll.js.map +1 -0
  255. package/dist/tools/memory.d.ts +10 -0
  256. package/dist/tools/memory.d.ts.map +1 -0
  257. package/dist/tools/memory.js +141 -0
  258. package/dist/tools/memory.js.map +1 -0
  259. package/dist/tools/navigate.d.ts +6 -0
  260. package/dist/tools/navigate.d.ts.map +1 -0
  261. package/dist/tools/navigate.js +241 -0
  262. package/dist/tools/navigate.js.map +1 -0
  263. package/dist/tools/network.d.ts +6 -0
  264. package/dist/tools/network.d.ts.map +1 -0
  265. package/dist/tools/network.js +215 -0
  266. package/dist/tools/network.js.map +1 -0
  267. package/dist/tools/orchestration.d.ts +6 -0
  268. package/dist/tools/orchestration.d.ts.map +1 -0
  269. package/dist/tools/orchestration.js +746 -0
  270. package/dist/tools/orchestration.js.map +1 -0
  271. package/dist/tools/page-content.d.ts +6 -0
  272. package/dist/tools/page-content.d.ts.map +1 -0
  273. package/dist/tools/page-content.js +120 -0
  274. package/dist/tools/page-content.js.map +1 -0
  275. package/dist/tools/page-pdf.d.ts +6 -0
  276. package/dist/tools/page-pdf.d.ts.map +1 -0
  277. package/dist/tools/page-pdf.js +245 -0
  278. package/dist/tools/page-pdf.js.map +1 -0
  279. package/dist/tools/page-reload.d.ts +6 -0
  280. package/dist/tools/page-reload.d.ts.map +1 -0
  281. package/dist/tools/page-reload.js +89 -0
  282. package/dist/tools/page-reload.js.map +1 -0
  283. package/dist/tools/performance-metrics.d.ts +6 -0
  284. package/dist/tools/performance-metrics.d.ts.map +1 -0
  285. package/dist/tools/performance-metrics.js +158 -0
  286. package/dist/tools/performance-metrics.js.map +1 -0
  287. package/dist/tools/read-page.d.ts +6 -0
  288. package/dist/tools/read-page.d.ts.map +1 -0
  289. package/dist/tools/read-page.js +287 -0
  290. package/dist/tools/read-page.js.map +1 -0
  291. package/dist/tools/request-intercept.d.ts +6 -0
  292. package/dist/tools/request-intercept.d.ts.map +1 -0
  293. package/dist/tools/request-intercept.js +439 -0
  294. package/dist/tools/request-intercept.js.map +1 -0
  295. package/dist/tools/selector-query.d.ts +6 -0
  296. package/dist/tools/selector-query.d.ts.map +1 -0
  297. package/dist/tools/selector-query.js +206 -0
  298. package/dist/tools/selector-query.js.map +1 -0
  299. package/dist/tools/shutdown.d.ts +12 -0
  300. package/dist/tools/shutdown.d.ts.map +1 -0
  301. package/dist/tools/shutdown.js +120 -0
  302. package/dist/tools/shutdown.js.map +1 -0
  303. package/dist/tools/storage.d.ts +6 -0
  304. package/dist/tools/storage.d.ts.map +1 -0
  305. package/dist/tools/storage.js +264 -0
  306. package/dist/tools/storage.js.map +1 -0
  307. package/dist/tools/tabs-close.d.ts +6 -0
  308. package/dist/tools/tabs-close.d.ts.map +1 -0
  309. package/dist/tools/tabs-close.js +124 -0
  310. package/dist/tools/tabs-close.js.map +1 -0
  311. package/dist/tools/tabs-context.d.ts +6 -0
  312. package/dist/tools/tabs-context.d.ts.map +1 -0
  313. package/dist/tools/tabs-context.js +92 -0
  314. package/dist/tools/tabs-context.js.map +1 -0
  315. package/dist/tools/tabs-create.d.ts +6 -0
  316. package/dist/tools/tabs-create.d.ts.map +1 -0
  317. package/dist/tools/tabs-create.js +73 -0
  318. package/dist/tools/tabs-create.js.map +1 -0
  319. package/dist/tools/user-agent.d.ts +6 -0
  320. package/dist/tools/user-agent.d.ts.map +1 -0
  321. package/dist/tools/user-agent.js +128 -0
  322. package/dist/tools/user-agent.js.map +1 -0
  323. package/dist/tools/wait-and-click.d.ts +8 -0
  324. package/dist/tools/wait-and-click.d.ts.map +1 -0
  325. package/dist/tools/wait-and-click.js +290 -0
  326. package/dist/tools/wait-and-click.js.map +1 -0
  327. package/dist/tools/wait-for.d.ts +6 -0
  328. package/dist/tools/wait-for.d.ts.map +1 -0
  329. package/dist/tools/wait-for.js +248 -0
  330. package/dist/tools/wait-for.js.map +1 -0
  331. package/dist/tools/worker-create.d.ts +7 -0
  332. package/dist/tools/worker-create.d.ts.map +1 -0
  333. package/dist/tools/worker-create.js +62 -0
  334. package/dist/tools/worker-create.js.map +1 -0
  335. package/dist/tools/worker-delete.d.ts +6 -0
  336. package/dist/tools/worker-delete.d.ts.map +1 -0
  337. package/dist/tools/worker-delete.js +80 -0
  338. package/dist/tools/worker-delete.js.map +1 -0
  339. package/dist/tools/worker-list.d.ts +6 -0
  340. package/dist/tools/worker-list.d.ts.map +1 -0
  341. package/dist/tools/worker-list.js +67 -0
  342. package/dist/tools/worker-list.js.map +1 -0
  343. package/dist/tools/xpath-query.d.ts +6 -0
  344. package/dist/tools/xpath-query.d.ts.map +1 -0
  345. package/dist/tools/xpath-query.js +230 -0
  346. package/dist/tools/xpath-query.js.map +1 -0
  347. package/dist/types/browser-backend.d.ts +30 -0
  348. package/dist/types/browser-backend.d.ts.map +1 -0
  349. package/dist/types/browser-backend.js +9 -0
  350. package/dist/types/browser-backend.js.map +1 -0
  351. package/dist/types/index.d.ts +3 -0
  352. package/dist/types/index.d.ts.map +1 -0
  353. package/dist/types/index.js +19 -0
  354. package/dist/types/index.js.map +1 -0
  355. package/dist/types/mcp.d.ts +54 -0
  356. package/dist/types/mcp.d.ts.map +1 -0
  357. package/dist/types/mcp.js +14 -0
  358. package/dist/types/mcp.js.map +1 -0
  359. package/dist/types/plan-cache.d.ts +121 -0
  360. package/dist/types/plan-cache.d.ts.map +1 -0
  361. package/dist/types/plan-cache.js +9 -0
  362. package/dist/types/plan-cache.js.map +1 -0
  363. package/dist/types/profile.d.ts +76 -0
  364. package/dist/types/profile.d.ts.map +1 -0
  365. package/dist/types/profile.js +35 -0
  366. package/dist/types/profile.js.map +1 -0
  367. package/dist/types/session.d.ts +65 -0
  368. package/dist/types/session.d.ts.map +1 -0
  369. package/dist/types/session.js +6 -0
  370. package/dist/types/session.js.map +1 -0
  371. package/dist/types/tool-manifest.d.ts +52 -0
  372. package/dist/types/tool-manifest.d.ts.map +1 -0
  373. package/dist/types/tool-manifest.js +37 -0
  374. package/dist/types/tool-manifest.js.map +1 -0
  375. package/dist/utils/atomic-file.d.ts +50 -0
  376. package/dist/utils/atomic-file.d.ts.map +1 -0
  377. package/dist/utils/atomic-file.js +217 -0
  378. package/dist/utils/atomic-file.js.map +1 -0
  379. package/dist/utils/index.d.ts +6 -0
  380. package/dist/utils/index.d.ts.map +1 -0
  381. package/dist/utils/index.js +22 -0
  382. package/dist/utils/index.js.map +1 -0
  383. package/dist/utils/json-validator.d.ts +40 -0
  384. package/dist/utils/json-validator.d.ts.map +1 -0
  385. package/dist/utils/json-validator.js +295 -0
  386. package/dist/utils/json-validator.js.map +1 -0
  387. package/dist/utils/ref-id-manager.d.ts +26 -0
  388. package/dist/utils/ref-id-manager.d.ts.map +1 -0
  389. package/dist/utils/ref-id-manager.js +81 -0
  390. package/dist/utils/ref-id-manager.js.map +1 -0
  391. package/dist/utils/request-queue.d.ts +37 -0
  392. package/dist/utils/request-queue.d.ts.map +1 -0
  393. package/dist/utils/request-queue.js +110 -0
  394. package/dist/utils/request-queue.js.map +1 -0
  395. package/package.json +78 -0
@@ -0,0 +1,68 @@
1
+ /**
2
+ * DomainMemory — Cross-project domain knowledge persistence.
3
+ *
4
+ * MCP-aligned: server stores and retrieves, agent decides what to store.
5
+ * Confidence: +0.1 on success, -0.2 on failure (asymmetric — broken selectors are dangerous).
6
+ * Storage: ~/.claude-chrome-parallel/memory/domain-knowledge.json
7
+ */
8
+ export interface DomainKnowledge {
9
+ id: string;
10
+ domain: string;
11
+ key: string;
12
+ value: string;
13
+ confidence: number;
14
+ updatedAt: number;
15
+ }
16
+ export declare class DomainMemory {
17
+ private entries;
18
+ private filePath;
19
+ private dirty;
20
+ static readonly MAX_ENTRIES = 200;
21
+ static readonly STALE_DAYS = 30;
22
+ static readonly MIN_CONFIDENCE = 0.2;
23
+ static readonly STALE_CONFIDENCE = 0.5;
24
+ static readonly CONFIDENCE_BOOST = 0.1;
25
+ static readonly CONFIDENCE_PENALTY = 0.2;
26
+ static readonly DEFAULT_CONFIDENCE = 0.5;
27
+ /**
28
+ * Enable persistence and run startup compression.
29
+ */
30
+ enablePersistence(dirPath: string): void;
31
+ /**
32
+ * CE: Write — Record domain knowledge. Agent calls this after successful operations.
33
+ * If an entry with the same domain+key exists, update its value and reset confidence.
34
+ */
35
+ record(domain: string, key: string, value: string): DomainKnowledge;
36
+ /**
37
+ * CE: Select — Returns entries for domain, sorted by confidence desc.
38
+ * Optionally filter by key prefix.
39
+ */
40
+ query(domain: string, key?: string): DomainKnowledge[];
41
+ /**
42
+ * Validation — Agent calls after using knowledge (success/fail).
43
+ * Returns updated entry, or null if not found / pruned.
44
+ */
45
+ validate(id: string, success: boolean): DomainKnowledge | null;
46
+ /**
47
+ * CE: Compress — Prune stale/invalid entries on startup.
48
+ * 1. confidence < 0.2 → remove
49
+ * 2. updatedAt > 30 days AND confidence < 0.5 → remove
50
+ * 3. count > 200 → remove lowest-confidence
51
+ */
52
+ compress(): {
53
+ pruned: number;
54
+ remaining: number;
55
+ };
56
+ /**
57
+ * Get all entries (for testing/inspection).
58
+ */
59
+ getAll(): DomainKnowledge[];
60
+ private load;
61
+ save(): void;
62
+ }
63
+ export declare function getDomainMemory(): DomainMemory;
64
+ /**
65
+ * Extract domain from a URL string. Returns empty string on failure.
66
+ */
67
+ export declare function extractDomainFromUrl(url: string): string;
68
+ //# sourceMappingURL=domain-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-memory.d.ts","sourceRoot":"","sources":["../../src/memory/domain-memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,KAAK,CAAS;IAEtB,MAAM,CAAC,QAAQ,CAAC,WAAW,OAAO;IAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,MAAM;IAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,OAAO;IACrC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,OAAO;IACvC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,OAAO;IACvC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,OAAO;IACzC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,OAAO;IAEzC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWxC;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe;IA6BnE;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IAUtD;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI;IAuB9D;;;;;OAKG;IACH,QAAQ,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA4BjD;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B,OAAO,CAAC,IAAI;IAWZ,IAAI,IAAI,IAAI;CAgBb;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAQ9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMxD"}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * DomainMemory — Cross-project domain knowledge persistence.
4
+ *
5
+ * MCP-aligned: server stores and retrieves, agent decides what to store.
6
+ * Confidence: +0.1 on success, -0.2 on failure (asymmetric — broken selectors are dangerous).
7
+ * Storage: ~/.claude-chrome-parallel/memory/domain-knowledge.json
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.DomainMemory = void 0;
44
+ exports.getDomainMemory = getDomainMemory;
45
+ exports.extractDomainFromUrl = extractDomainFromUrl;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ class DomainMemory {
49
+ entries = [];
50
+ filePath = null;
51
+ dirty = false;
52
+ static MAX_ENTRIES = 200;
53
+ static STALE_DAYS = 30;
54
+ static MIN_CONFIDENCE = 0.2;
55
+ static STALE_CONFIDENCE = 0.5;
56
+ static CONFIDENCE_BOOST = 0.1;
57
+ static CONFIDENCE_PENALTY = 0.2;
58
+ static DEFAULT_CONFIDENCE = 0.5;
59
+ /**
60
+ * Enable persistence and run startup compression.
61
+ */
62
+ enablePersistence(dirPath) {
63
+ try {
64
+ fs.mkdirSync(dirPath, { recursive: true });
65
+ this.filePath = path.join(dirPath, 'domain-knowledge.json');
66
+ this.load();
67
+ this.compress();
68
+ }
69
+ catch {
70
+ // Best-effort
71
+ }
72
+ }
73
+ /**
74
+ * CE: Write — Record domain knowledge. Agent calls this after successful operations.
75
+ * If an entry with the same domain+key exists, update its value and reset confidence.
76
+ */
77
+ record(domain, key, value) {
78
+ const existing = this.entries.find((e) => e.domain === domain && e.key === key);
79
+ if (existing) {
80
+ existing.value = value;
81
+ existing.confidence = Math.max(existing.confidence, DomainMemory.DEFAULT_CONFIDENCE);
82
+ existing.updatedAt = Date.now();
83
+ this.dirty = true;
84
+ this.save();
85
+ return existing;
86
+ }
87
+ const entry = {
88
+ id: `dk-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
89
+ domain,
90
+ key,
91
+ value,
92
+ confidence: DomainMemory.DEFAULT_CONFIDENCE,
93
+ updatedAt: Date.now(),
94
+ };
95
+ this.entries.push(entry);
96
+ this.dirty = true;
97
+ this.save();
98
+ return entry;
99
+ }
100
+ /**
101
+ * CE: Select — Returns entries for domain, sorted by confidence desc.
102
+ * Optionally filter by key prefix.
103
+ */
104
+ query(domain, key) {
105
+ let results = this.entries.filter((e) => e.domain === domain);
106
+ if (key) {
107
+ results = results.filter((e) => e.key === key || e.key.startsWith(key + ':'));
108
+ }
109
+ return results.sort((a, b) => b.confidence - a.confidence);
110
+ }
111
+ /**
112
+ * Validation — Agent calls after using knowledge (success/fail).
113
+ * Returns updated entry, or null if not found / pruned.
114
+ */
115
+ validate(id, success) {
116
+ const entry = this.entries.find((e) => e.id === id);
117
+ if (!entry)
118
+ return null;
119
+ if (success) {
120
+ entry.confidence = Math.min(1.0, entry.confidence + DomainMemory.CONFIDENCE_BOOST);
121
+ }
122
+ else {
123
+ entry.confidence = Math.max(0.0, entry.confidence - DomainMemory.CONFIDENCE_PENALTY);
124
+ }
125
+ entry.updatedAt = Date.now();
126
+ this.dirty = true;
127
+ // Prune if confidence dropped below threshold
128
+ if (entry.confidence < DomainMemory.MIN_CONFIDENCE) {
129
+ this.entries = this.entries.filter((e) => e.id !== id);
130
+ this.save();
131
+ return null;
132
+ }
133
+ this.save();
134
+ return entry;
135
+ }
136
+ /**
137
+ * CE: Compress — Prune stale/invalid entries on startup.
138
+ * 1. confidence < 0.2 → remove
139
+ * 2. updatedAt > 30 days AND confidence < 0.5 → remove
140
+ * 3. count > 200 → remove lowest-confidence
141
+ */
142
+ compress() {
143
+ const before = this.entries.length;
144
+ const now = Date.now();
145
+ const staleCutoff = now - DomainMemory.STALE_DAYS * 24 * 60 * 60 * 1000;
146
+ // Rule 1 & 2: Remove low-confidence and stale entries
147
+ this.entries = this.entries.filter((e) => {
148
+ if (e.confidence < DomainMemory.MIN_CONFIDENCE)
149
+ return false;
150
+ if (e.updatedAt < staleCutoff && e.confidence < DomainMemory.STALE_CONFIDENCE)
151
+ return false;
152
+ return true;
153
+ });
154
+ // Rule 3: Cap at MAX_ENTRIES, keep highest confidence
155
+ if (this.entries.length > DomainMemory.MAX_ENTRIES) {
156
+ this.entries.sort((a, b) => b.confidence - a.confidence);
157
+ this.entries = this.entries.slice(0, DomainMemory.MAX_ENTRIES);
158
+ }
159
+ const pruned = before - this.entries.length;
160
+ if (pruned > 0) {
161
+ this.dirty = true;
162
+ this.save();
163
+ console.error(`[DomainMemory] Compressed: pruned ${pruned}, remaining ${this.entries.length}`);
164
+ }
165
+ return { pruned, remaining: this.entries.length };
166
+ }
167
+ /**
168
+ * Get all entries (for testing/inspection).
169
+ */
170
+ getAll() {
171
+ return this.entries;
172
+ }
173
+ load() {
174
+ if (!this.filePath)
175
+ return;
176
+ try {
177
+ const data = fs.readFileSync(this.filePath, 'utf-8');
178
+ const store = JSON.parse(data);
179
+ this.entries = store.entries || [];
180
+ }
181
+ catch {
182
+ this.entries = [];
183
+ }
184
+ }
185
+ save() {
186
+ if (!this.filePath || !this.dirty)
187
+ return;
188
+ try {
189
+ const dir = path.dirname(this.filePath);
190
+ fs.mkdirSync(dir, { recursive: true });
191
+ const store = {
192
+ version: 1,
193
+ entries: this.entries,
194
+ updatedAt: Date.now(),
195
+ };
196
+ fs.writeFileSync(this.filePath, JSON.stringify(store, null, 2));
197
+ this.dirty = false;
198
+ }
199
+ catch {
200
+ // Best-effort
201
+ }
202
+ }
203
+ }
204
+ exports.DomainMemory = DomainMemory;
205
+ // Singleton
206
+ let instance = null;
207
+ function getDomainMemory() {
208
+ if (!instance) {
209
+ instance = new DomainMemory();
210
+ const homedir = process.env.HOME || process.env.USERPROFILE || '';
211
+ const memoryDir = path.join(homedir, '.claude-chrome-parallel', 'memory');
212
+ instance.enablePersistence(memoryDir);
213
+ }
214
+ return instance;
215
+ }
216
+ /**
217
+ * Extract domain from a URL string. Returns empty string on failure.
218
+ */
219
+ function extractDomainFromUrl(url) {
220
+ try {
221
+ return new URL(url).hostname;
222
+ }
223
+ catch {
224
+ return '';
225
+ }
226
+ }
227
+ //# sourceMappingURL=domain-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-memory.js","sourceRoot":"","sources":["../../src/memory/domain-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * PlanExecutor - Executes compiled plans by chaining tool handlers internally.
3
+ *
4
+ * Bypasses per-step agent LLM round-trips by resolving and calling tool handlers
5
+ * directly from the MCP server's internal registry.
6
+ */
7
+ import { ToolHandler } from '../types/mcp';
8
+ import { CompiledPlan, PlanExecutionResult } from '../types/plan-cache';
9
+ export declare class PlanExecutor {
10
+ private toolResolver;
11
+ constructor(toolResolver: (toolName: string) => ToolHandler | null);
12
+ execute(plan: CompiledPlan, sessionId: string, runtimeParams: Record<string, unknown>): Promise<PlanExecutionResult>;
13
+ /**
14
+ * Attempt to find and run a recovery handler for a given condition.
15
+ * Returns updated stepsExecuted + params snapshot on success, null if no handler.
16
+ */
17
+ private tryRecovery;
18
+ }
19
+ //# sourceMappingURL=plan-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-executor.d.ts","sourceRoot":"","sources":["../../src/orchestration/plan-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,WAAW,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,YAAY,EAGZ,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAiI7B,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAA2C;gBAEnD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI;IAI5D,OAAO,CACX,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,OAAO,CAAC,mBAAmB,CAAC;IAsJ/B;;;OAGG;YACW,WAAW;CAqE1B"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ /**
3
+ * PlanExecutor - Executes compiled plans by chaining tool handlers internally.
4
+ *
5
+ * Bypasses per-step agent LLM round-trips by resolving and calling tool handlers
6
+ * directly from the MCP server's internal registry.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PlanExecutor = void 0;
10
+ /**
11
+ * Recursively substitute ${varName} templates in a value using the params map.
12
+ * Handles strings, objects, and arrays. Non-string primitives are returned as-is.
13
+ * Missing vars are left as-is (no crash).
14
+ */
15
+ function substituteParams(value, params) {
16
+ if (typeof value === 'string') {
17
+ return value.replace(/\$\{([^}]+)\}/g, (match, varName) => {
18
+ const resolved = params[varName];
19
+ if (resolved === undefined)
20
+ return match;
21
+ if (typeof resolved === 'string')
22
+ return resolved;
23
+ return JSON.stringify(resolved);
24
+ });
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map((item) => substituteParams(item, params));
28
+ }
29
+ if (value !== null && typeof value === 'object') {
30
+ const result = {};
31
+ for (const [k, v] of Object.entries(value)) {
32
+ result[k] = substituteParams(v, params);
33
+ }
34
+ return result;
35
+ }
36
+ return value;
37
+ }
38
+ /**
39
+ * Apply a timeout to a promise via Promise.race.
40
+ */
41
+ function withTimeout(promise, timeoutMs, label) {
42
+ return Promise.race([
43
+ promise,
44
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${timeoutMs}ms (${label})`)), timeoutMs)),
45
+ ]);
46
+ }
47
+ /**
48
+ * Extract result data from an MCPResult according to parseResult spec.
49
+ * Returns the extracted value (raw text, parsed JSON, or a specific field).
50
+ */
51
+ function extractResult(mcpResult, parseResult) {
52
+ const content = mcpResult.content;
53
+ const text = content && content.length > 0 ? content[0].text ?? '' : '';
54
+ if (parseResult.format === 'text') {
55
+ return text;
56
+ }
57
+ // format === 'json'
58
+ let parsed;
59
+ try {
60
+ parsed = JSON.parse(text);
61
+ }
62
+ catch {
63
+ parsed = text;
64
+ }
65
+ if (parseResult.extractField) {
66
+ const obj = parsed;
67
+ parsed = obj?.[parseResult.extractField];
68
+ }
69
+ return parsed;
70
+ }
71
+ /**
72
+ * Check whether an MCPResult represents an empty/no-data result.
73
+ */
74
+ function isEmptyResult(mcpResult) {
75
+ if (mcpResult.isError)
76
+ return false; // errors are not "empty"
77
+ const content = mcpResult.content;
78
+ if (!content || content.length === 0)
79
+ return true;
80
+ const text = content[0].text ?? '';
81
+ if (text.trim() === '' || text.trim() === 'null' || text.trim() === '[]' || text.trim() === '{}') {
82
+ return true;
83
+ }
84
+ return false;
85
+ }
86
+ /**
87
+ * Validate final params against the plan's success criteria.
88
+ * Returns null if valid, or an error string describing the violation.
89
+ */
90
+ function validateSuccessCriteria(criteria, params) {
91
+ if (criteria.minDataItems !== undefined) {
92
+ // Find the first array or object in params that could represent "data items"
93
+ let found = false;
94
+ for (const val of Object.values(params)) {
95
+ if (Array.isArray(val)) {
96
+ if (val.length < criteria.minDataItems) {
97
+ return `minDataItems requirement not met: got ${val.length}, need ${criteria.minDataItems}`;
98
+ }
99
+ found = true;
100
+ break;
101
+ }
102
+ else if (val !== null && typeof val === 'object') {
103
+ const count = Object.keys(val).length;
104
+ if (count < criteria.minDataItems) {
105
+ return `minDataItems requirement not met: got ${count}, need ${criteria.minDataItems}`;
106
+ }
107
+ found = true;
108
+ break;
109
+ }
110
+ }
111
+ if (!found && criteria.minDataItems > 0) {
112
+ return `minDataItems requirement not met: no collection found in params`;
113
+ }
114
+ }
115
+ if (criteria.requiredFields && criteria.requiredFields.length > 0) {
116
+ for (const field of criteria.requiredFields) {
117
+ if (!(field in params) || params[field] === undefined) {
118
+ return `Required field missing from params: ${field}`;
119
+ }
120
+ }
121
+ }
122
+ return null;
123
+ }
124
+ class PlanExecutor {
125
+ toolResolver;
126
+ constructor(toolResolver) {
127
+ this.toolResolver = toolResolver;
128
+ }
129
+ async execute(plan, sessionId, runtimeParams) {
130
+ const startTime = Date.now();
131
+ let stepsExecuted = 0;
132
+ // 1. Build params map: plan defaults first, runtime overrides on top
133
+ const params = {};
134
+ for (const [key, spec] of Object.entries(plan.parameters)) {
135
+ if (spec.default !== undefined) {
136
+ params[key] = spec.default;
137
+ }
138
+ }
139
+ Object.assign(params, runtimeParams);
140
+ const failure = (error) => ({
141
+ success: false,
142
+ planId: plan.id,
143
+ error,
144
+ durationMs: Date.now() - startTime,
145
+ stepsExecuted,
146
+ totalSteps: plan.steps.length,
147
+ });
148
+ // 2. Execute each step sequentially
149
+ for (const step of plan.steps) {
150
+ const stepLabel = `plan=${plan.id} step=${step.order} tool=${step.tool}`;
151
+ // a. Resolve handler
152
+ const handler = this.toolResolver(step.tool);
153
+ if (!handler) {
154
+ const msg = `No handler found for tool "${step.tool}" at ${stepLabel}`;
155
+ console.error(`[PlanExecutor] ${msg}`);
156
+ return failure(msg);
157
+ }
158
+ // b. Substitute template variables in args
159
+ const substitutedArgs = substituteParams(step.args, params);
160
+ // c. Call handler with timeout
161
+ let mcpResult;
162
+ try {
163
+ mcpResult = await withTimeout(handler(sessionId, substitutedArgs), step.timeout, stepLabel);
164
+ stepsExecuted++;
165
+ }
166
+ catch (err) {
167
+ const errMsg = err instanceof Error ? err.message : String(err);
168
+ console.error(`[PlanExecutor] Step failed at ${stepLabel}: ${errMsg}`);
169
+ // Check for a matching error handler
170
+ const conditionKey = `step${step.order}_error`;
171
+ const recovered = await this.tryRecovery(conditionKey, plan.errorHandlers, sessionId, params, stepsExecuted);
172
+ if (recovered !== null) {
173
+ stepsExecuted = recovered.stepsExecuted;
174
+ // Merge any params updates from recovery into our params
175
+ Object.assign(params, recovered.params);
176
+ continue;
177
+ }
178
+ return failure(`Step ${step.order} (${step.tool}) failed: ${errMsg}`);
179
+ }
180
+ // d. Check for error result
181
+ if (mcpResult.isError) {
182
+ const errMsg = mcpResult.content?.[0]?.text ?? 'Unknown tool error';
183
+ console.error(`[PlanExecutor] Tool returned error at ${stepLabel}: ${errMsg}`);
184
+ const conditionKey = `step${step.order}_error`;
185
+ const recovered = await this.tryRecovery(conditionKey, plan.errorHandlers, sessionId, params, stepsExecuted);
186
+ if (recovered !== null) {
187
+ stepsExecuted = recovered.stepsExecuted;
188
+ Object.assign(params, recovered.params);
189
+ continue;
190
+ }
191
+ return failure(`Step ${step.order} (${step.tool}) returned error: ${errMsg}`);
192
+ }
193
+ // e. Check for empty result (before storing) — may trigger empty_result handler
194
+ if (isEmptyResult(mcpResult)) {
195
+ const conditionKey = `step${step.order}_empty_result`;
196
+ const recovered = await this.tryRecovery(conditionKey, plan.errorHandlers, sessionId, params, stepsExecuted);
197
+ if (recovered !== null) {
198
+ stepsExecuted = recovered.stepsExecuted;
199
+ Object.assign(params, recovered.params);
200
+ continue;
201
+ }
202
+ // No handler for empty — treat as non-fatal, just skip storing
203
+ }
204
+ // f. Parse and store result if requested
205
+ if (step.parseResult && step.parseResult.storeAs) {
206
+ try {
207
+ const extracted = extractResult(mcpResult, step.parseResult);
208
+ params[step.parseResult.storeAs] = extracted;
209
+ }
210
+ catch (err) {
211
+ console.error(`[PlanExecutor] Failed to extract result at ${stepLabel}: ${err instanceof Error ? err.message : String(err)}`);
212
+ // Non-fatal: continue without storing
213
+ }
214
+ }
215
+ }
216
+ // 3. Validate success criteria
217
+ const criteriaError = validateSuccessCriteria(plan.successCriteria, params);
218
+ if (criteriaError) {
219
+ console.error(`[PlanExecutor] Success criteria failed for plan=${plan.id}: ${criteriaError}`);
220
+ return {
221
+ success: false,
222
+ planId: plan.id,
223
+ error: `Success criteria not met: ${criteriaError}`,
224
+ durationMs: Date.now() - startTime,
225
+ stepsExecuted,
226
+ totalSteps: plan.steps.length,
227
+ };
228
+ }
229
+ // 4. Return success with all collected params as data
230
+ return {
231
+ success: true,
232
+ planId: plan.id,
233
+ data: params,
234
+ durationMs: Date.now() - startTime,
235
+ stepsExecuted,
236
+ totalSteps: plan.steps.length,
237
+ };
238
+ }
239
+ /**
240
+ * Attempt to find and run a recovery handler for a given condition.
241
+ * Returns updated stepsExecuted + params snapshot on success, null if no handler.
242
+ */
243
+ async tryRecovery(conditionKey, errorHandlers, sessionId, params, currentStepsExecuted) {
244
+ const handler = errorHandlers.find((h) => h.condition === conditionKey);
245
+ if (!handler)
246
+ return null;
247
+ console.error(`[PlanExecutor] Running error handler "${handler.action}" for condition "${conditionKey}"`);
248
+ let stepsExecuted = currentStepsExecuted;
249
+ for (const step of handler.steps) {
250
+ const stepLabel = `recovery action=${handler.action} step=${step.order} tool=${step.tool}`;
251
+ const toolHandler = this.toolResolver(step.tool);
252
+ if (!toolHandler) {
253
+ console.error(`[PlanExecutor] Recovery: no handler for tool "${step.tool}" at ${stepLabel}`);
254
+ continue;
255
+ }
256
+ const substitutedArgs = substituteParams(step.args, params);
257
+ let mcpResult;
258
+ try {
259
+ mcpResult = await withTimeout(toolHandler(sessionId, substitutedArgs), step.timeout, stepLabel);
260
+ stepsExecuted++;
261
+ }
262
+ catch (err) {
263
+ console.error(`[PlanExecutor] Recovery step failed at ${stepLabel}: ${err instanceof Error ? err.message : String(err)}`);
264
+ continue;
265
+ }
266
+ if (mcpResult.isError) {
267
+ console.error(`[PlanExecutor] Recovery step returned error at ${stepLabel}: ${mcpResult.content?.[0]?.text ?? 'unknown'}`);
268
+ continue;
269
+ }
270
+ if (step.parseResult && step.parseResult.storeAs) {
271
+ try {
272
+ const extracted = extractResult(mcpResult, step.parseResult);
273
+ params[step.parseResult.storeAs] = extracted;
274
+ }
275
+ catch (err) {
276
+ console.error(`[PlanExecutor] Recovery: failed to extract result at ${stepLabel}: ${err instanceof Error ? err.message : String(err)}`);
277
+ }
278
+ }
279
+ }
280
+ return { stepsExecuted, params };
281
+ }
282
+ }
283
+ exports.PlanExecutor = PlanExecutor;
284
+ //# sourceMappingURL=plan-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-executor.js","sourceRoot":"","sources":["../../src/orchestration/plan-executor.ts"],"names":[],"mappings":"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"}