explorbot 0.0.1 → 0.1.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 (423) hide show
  1. package/README.md +80 -26
  2. package/bin/explorbot-cli.ts +680 -0
  3. package/boat/api-tester/src/ai/chief/styles.ts +15 -0
  4. package/boat/api-tester/src/ai/chief.ts +335 -0
  5. package/boat/api-tester/src/ai/curler-tools.ts +278 -0
  6. package/boat/api-tester/src/ai/curler.ts +306 -0
  7. package/boat/api-tester/src/api-client.ts +28 -0
  8. package/boat/api-tester/src/apibot.ts +203 -0
  9. package/boat/api-tester/src/cli.ts +301 -0
  10. package/boat/api-tester/src/config.ts +190 -0
  11. package/dist/bin/explorbot-cli.js +23 -101
  12. package/dist/boat/api-tester/bin/apibot-cli.js +0 -1
  13. package/dist/boat/api-tester/src/ai/chief/styles.js +0 -1
  14. package/dist/boat/api-tester/src/ai/chief.js +0 -1
  15. package/dist/boat/api-tester/src/ai/curler-tools.js +0 -1
  16. package/dist/boat/api-tester/src/ai/curler.js +0 -1
  17. package/dist/boat/api-tester/src/api-client.js +0 -1
  18. package/dist/boat/api-tester/src/apibot.js +0 -1
  19. package/dist/boat/api-tester/src/cli.js +0 -1
  20. package/dist/boat/api-tester/src/config.js +0 -1
  21. package/dist/src/action-result.js +0 -1
  22. package/dist/src/action.js +14 -12
  23. package/dist/src/activity.js +0 -1
  24. package/dist/src/ai/agent.js +0 -1
  25. package/dist/src/ai/bosun.js +0 -1
  26. package/dist/src/ai/captain/idle-mode.js +0 -1
  27. package/dist/src/ai/captain/mixin.js +0 -1
  28. package/dist/src/ai/captain/test-mode.js +0 -1
  29. package/dist/src/ai/captain/web-mode.js +0 -1
  30. package/dist/src/ai/captain.js +0 -1
  31. package/dist/src/ai/conversation.js +0 -1
  32. package/dist/src/ai/experience-compactor.js +0 -1
  33. package/dist/src/ai/fisherman-tools.js +0 -1
  34. package/dist/src/ai/fisherman.js +0 -1
  35. package/dist/src/ai/historian.js +0 -1
  36. package/dist/src/ai/navigator.js +0 -1
  37. package/dist/src/ai/pilot.js +0 -1
  38. package/dist/src/ai/planner/session-dedup.js +0 -1
  39. package/dist/src/ai/planner/styles.js +0 -1
  40. package/dist/src/ai/planner/subpages.js +42 -7
  41. package/dist/src/ai/planner.js +15 -4
  42. package/dist/src/ai/provider.js +0 -1
  43. package/dist/src/ai/quartermaster.js +0 -1
  44. package/dist/src/ai/researcher/cache.js +13 -9
  45. package/dist/src/ai/researcher/coordinates.js +4 -3
  46. package/dist/src/ai/researcher/deep-analysis.js +16 -20
  47. package/dist/src/ai/researcher/fingerprint-worker.js +0 -1
  48. package/dist/src/ai/researcher/focus.js +0 -1
  49. package/dist/src/ai/researcher/locators.js +1 -2
  50. package/dist/src/ai/researcher/mixin.js +0 -1
  51. package/dist/src/ai/researcher/parser.js +4 -4
  52. package/dist/src/ai/researcher/research-result.js +2 -1
  53. package/dist/src/ai/researcher.js +6 -6
  54. package/dist/src/ai/rules.js +0 -1
  55. package/dist/src/ai/task-agent.js +0 -1
  56. package/dist/src/ai/tester.js +0 -1
  57. package/dist/src/ai/tools.js +4 -1
  58. package/dist/src/api/api-client.js +0 -1
  59. package/dist/src/api/request-result.js +0 -1
  60. package/dist/src/api/request-store.js +0 -1
  61. package/dist/src/api/spec-reader.js +0 -1
  62. package/dist/src/api/xhr-capture.js +0 -1
  63. package/dist/src/browser-server.js +0 -1
  64. package/dist/src/command-handler.js +0 -1
  65. package/dist/src/commands/add-rule-command.js +0 -1
  66. package/dist/src/commands/base-command.js +0 -1
  67. package/dist/src/commands/clean-command.js +0 -1
  68. package/dist/src/commands/context-aria-command.js +0 -1
  69. package/dist/src/commands/context-command.js +2 -3
  70. package/dist/src/commands/context-data-command.js +0 -1
  71. package/dist/src/commands/context-experience-command.js +0 -1
  72. package/dist/src/commands/context-html-command.js +0 -1
  73. package/dist/src/commands/context-knowledge-command.js +0 -1
  74. package/dist/src/commands/debug-command.js +0 -1
  75. package/dist/src/commands/drill-command.js +0 -1
  76. package/dist/src/commands/exit-command.js +0 -1
  77. package/dist/src/commands/explore-command.js +3 -3
  78. package/dist/src/commands/freesail-command.js +0 -1
  79. package/dist/src/commands/help-command.js +0 -1
  80. package/dist/src/commands/index.js +0 -1
  81. package/dist/src/commands/init-command.js +117 -0
  82. package/dist/src/commands/knows-command.js +0 -1
  83. package/dist/src/commands/learn-command.js +0 -1
  84. package/dist/src/commands/navigate-command.js +0 -1
  85. package/dist/src/commands/path-command.js +0 -1
  86. package/dist/src/commands/plan-clear-command.js +0 -1
  87. package/dist/src/commands/plan-command.js +6 -2
  88. package/dist/src/commands/plan-edit-command.js +0 -1
  89. package/dist/src/commands/plan-load-command.js +0 -1
  90. package/dist/src/commands/plan-reload-command.js +0 -1
  91. package/dist/src/commands/plan-save-command.js +0 -1
  92. package/dist/src/commands/research-command.js +0 -1
  93. package/dist/src/commands/start-command.js +0 -1
  94. package/dist/src/commands/status-command.js +0 -1
  95. package/dist/src/commands/test-command.js +0 -1
  96. package/dist/src/components/ActivityPane.js +0 -1
  97. package/dist/src/components/AddKnowledge.js +0 -1
  98. package/dist/src/components/AddRule.js +0 -1
  99. package/dist/src/components/App.js +0 -1
  100. package/dist/src/components/Autocomplete.js +0 -1
  101. package/dist/src/components/InputPane.js +0 -1
  102. package/dist/src/components/InputReadline.js +0 -1
  103. package/dist/src/components/LogPane.js +0 -1
  104. package/dist/src/components/PlanEditor.js +0 -1
  105. package/dist/src/components/PlanPane.js +0 -1
  106. package/dist/src/components/SessionTimer.js +0 -1
  107. package/dist/src/components/StateTransitionPane.js +0 -1
  108. package/dist/src/components/StatusPane.js +0 -1
  109. package/dist/src/components/TaskPane.js +0 -1
  110. package/dist/src/components/Welcome.js +0 -1
  111. package/dist/src/components/WelcomeChecklist.js +0 -1
  112. package/dist/src/components/WelcomeCommands.js +0 -1
  113. package/dist/src/components/autocomplete-store.js +0 -1
  114. package/dist/src/components/parse-keypress.js +0 -1
  115. package/dist/src/config.js +0 -1
  116. package/dist/src/execution-controller.js +0 -1
  117. package/dist/src/experience-tracker.js +0 -1
  118. package/dist/src/explorbot.js +1 -2
  119. package/dist/src/explorer.js +58 -17
  120. package/dist/src/index.js +0 -1
  121. package/dist/src/knowledge-tracker.js +2 -2
  122. package/dist/src/observability.js +0 -1
  123. package/dist/src/reporter.js +0 -1
  124. package/dist/src/state-manager.js +0 -1
  125. package/dist/src/stats.js +0 -1
  126. package/dist/src/test-plan.js +0 -1
  127. package/dist/src/utils/aria.js +0 -1
  128. package/dist/src/utils/cli-name.js +16 -0
  129. package/dist/src/utils/code-extractor.js +0 -1
  130. package/dist/src/utils/context-formatter.js +0 -1
  131. package/dist/src/utils/error-page.js +0 -1
  132. package/dist/src/utils/expandable.js +0 -1
  133. package/dist/src/utils/hooks-runner.js +0 -1
  134. package/dist/src/utils/html-diff.js +0 -1
  135. package/dist/src/utils/html.js +0 -1
  136. package/dist/src/utils/logger.js +0 -1
  137. package/dist/src/utils/loop.js +0 -1
  138. package/dist/src/utils/markdown-parser.js +0 -1
  139. package/dist/src/utils/markdown-query.js +0 -1
  140. package/dist/src/utils/markdown-terminal.js +0 -1
  141. package/dist/src/utils/research-parser.js +0 -1
  142. package/dist/src/utils/retry.js +0 -1
  143. package/dist/src/utils/rules-loader.js +0 -1
  144. package/dist/src/utils/strings.js +0 -1
  145. package/dist/src/utils/test-plan-markdown.js +0 -1
  146. package/dist/src/utils/throttle.js +0 -1
  147. package/dist/src/utils/unique-names.js +0 -1
  148. package/dist/src/utils/url-matcher.js +0 -1
  149. package/dist/src/utils/web-element.js +6 -5
  150. package/dist/src/utils/xpath.js +0 -1
  151. package/package.json +28 -4
  152. package/src/action-result.ts +694 -0
  153. package/src/action.ts +449 -0
  154. package/src/activity.ts +111 -0
  155. package/src/ai/agent.ts +3 -0
  156. package/src/ai/bosun.ts +557 -0
  157. package/src/ai/captain/idle-mode.ts +116 -0
  158. package/src/ai/captain/mixin.ts +22 -0
  159. package/src/ai/captain/test-mode.ts +262 -0
  160. package/src/ai/captain/web-mode.ts +136 -0
  161. package/src/ai/captain.ts +504 -0
  162. package/src/ai/conversation.ts +205 -0
  163. package/src/ai/experience-compactor.ts +284 -0
  164. package/src/ai/fisherman-tools.ts +181 -0
  165. package/src/ai/fisherman.ts +223 -0
  166. package/src/ai/historian.ts +457 -0
  167. package/src/ai/navigator.ts +572 -0
  168. package/src/ai/pilot.ts +776 -0
  169. package/src/ai/planner/session-dedup.ts +35 -0
  170. package/src/ai/planner/styles.ts +17 -0
  171. package/src/ai/planner/subpages.ts +171 -0
  172. package/src/ai/planner.ts +549 -0
  173. package/src/ai/provider.ts +613 -0
  174. package/src/ai/quartermaster.ts +286 -0
  175. package/src/ai/researcher/cache.ts +109 -0
  176. package/src/ai/researcher/coordinates.ts +239 -0
  177. package/src/ai/researcher/deep-analysis.ts +412 -0
  178. package/src/ai/researcher/fingerprint-worker.ts +59 -0
  179. package/src/ai/researcher/focus.ts +42 -0
  180. package/src/ai/researcher/locators.ts +282 -0
  181. package/src/ai/researcher/mixin.ts +4 -0
  182. package/src/ai/researcher/parser.ts +186 -0
  183. package/src/ai/researcher/research-result.ts +116 -0
  184. package/src/ai/researcher.ts +858 -0
  185. package/src/ai/rules.ts +376 -0
  186. package/src/ai/task-agent.ts +141 -0
  187. package/src/ai/tester.ts +939 -0
  188. package/src/ai/tools.ts +1122 -0
  189. package/src/api/api-client.ts +109 -0
  190. package/src/api/request-result.ts +212 -0
  191. package/src/api/request-store.ts +130 -0
  192. package/src/api/spec-reader.ts +174 -0
  193. package/src/api/xhr-capture.ts +100 -0
  194. package/src/browser-server.ts +74 -0
  195. package/src/command-handler.ts +454 -0
  196. package/src/commands/add-rule-command.ts +63 -0
  197. package/src/commands/base-command.ts +27 -0
  198. package/src/commands/clean-command.ts +73 -0
  199. package/src/commands/context-aria-command.ts +22 -0
  200. package/src/commands/context-command.ts +67 -0
  201. package/src/commands/context-data-command.ts +30 -0
  202. package/src/commands/context-experience-command.ts +48 -0
  203. package/src/commands/context-html-command.ts +33 -0
  204. package/src/commands/context-knowledge-command.ts +43 -0
  205. package/src/commands/debug-command.ts +13 -0
  206. package/src/commands/drill-command.ts +34 -0
  207. package/src/commands/exit-command.ts +32 -0
  208. package/src/commands/explore-command.ts +129 -0
  209. package/src/commands/freesail-command.ts +95 -0
  210. package/src/commands/help-command.ts +8 -0
  211. package/src/commands/index.ts +69 -0
  212. package/src/commands/init-command.ts +131 -0
  213. package/src/commands/knows-command.ts +68 -0
  214. package/src/commands/learn-command.ts +44 -0
  215. package/src/commands/navigate-command.ts +18 -0
  216. package/src/commands/path-command.ts +83 -0
  217. package/src/commands/plan-clear-command.ts +14 -0
  218. package/src/commands/plan-command.ts +46 -0
  219. package/src/commands/plan-edit-command.ts +9 -0
  220. package/src/commands/plan-load-command.ts +18 -0
  221. package/src/commands/plan-reload-command.ts +28 -0
  222. package/src/commands/plan-save-command.ts +25 -0
  223. package/src/commands/research-command.ts +45 -0
  224. package/src/commands/start-command.ts +13 -0
  225. package/src/commands/status-command.tsx +23 -0
  226. package/src/commands/test-command.ts +84 -0
  227. package/src/components/ActivityPane.tsx +80 -0
  228. package/src/components/AddKnowledge.tsx +169 -0
  229. package/src/components/AddRule.tsx +174 -0
  230. package/src/components/App.tsx +377 -0
  231. package/src/components/Autocomplete.tsx +63 -0
  232. package/src/components/InputPane.tsx +259 -0
  233. package/src/components/InputReadline.tsx +704 -0
  234. package/src/components/LogPane.tsx +187 -0
  235. package/src/components/PlanEditor.tsx +150 -0
  236. package/src/components/PlanPane.tsx +71 -0
  237. package/src/components/SessionTimer.tsx +35 -0
  238. package/src/components/StateTransitionPane.tsx +149 -0
  239. package/src/components/StatusPane.tsx +62 -0
  240. package/src/components/TaskPane.tsx +119 -0
  241. package/src/components/Welcome.tsx +83 -0
  242. package/src/components/WelcomeChecklist.tsx +118 -0
  243. package/src/components/WelcomeCommands.tsx +102 -0
  244. package/src/components/autocomplete-store.ts +35 -0
  245. package/src/components/parse-keypress.ts +170 -0
  246. package/src/config.ts +491 -0
  247. package/src/execution-controller.ts +109 -0
  248. package/src/experience-tracker.ts +350 -0
  249. package/src/explorbot.ts +405 -0
  250. package/src/explorer.ts +760 -0
  251. package/src/index.tsx +62 -0
  252. package/src/knowledge-tracker.ts +230 -0
  253. package/src/observability.ts +150 -0
  254. package/src/reporter.ts +224 -0
  255. package/src/state-manager.ts +556 -0
  256. package/src/stats.ts +53 -0
  257. package/src/test-plan.ts +432 -0
  258. package/src/utils/aria.ts +629 -0
  259. package/src/utils/cli-name.ts +13 -0
  260. package/src/utils/code-extractor.ts +22 -0
  261. package/src/utils/context-formatter.ts +239 -0
  262. package/src/utils/error-page.ts +23 -0
  263. package/src/utils/expandable.ts +38 -0
  264. package/src/utils/hooks-runner.ts +79 -0
  265. package/src/utils/html-diff.ts +918 -0
  266. package/src/utils/html.ts +1316 -0
  267. package/src/utils/logger.ts +534 -0
  268. package/src/utils/loop.ts +176 -0
  269. package/src/utils/markdown-parser.ts +127 -0
  270. package/src/utils/markdown-query.ts +466 -0
  271. package/src/utils/markdown-terminal.ts +43 -0
  272. package/src/utils/research-parser.ts +11 -0
  273. package/src/utils/retry.ts +73 -0
  274. package/src/utils/rules-loader.ts +118 -0
  275. package/src/utils/strings.ts +13 -0
  276. package/src/utils/test-plan-markdown.ts +332 -0
  277. package/src/utils/throttle.ts +18 -0
  278. package/src/utils/unique-names.ts +14 -0
  279. package/src/utils/url-matcher.ts +45 -0
  280. package/src/utils/web-element.ts +147 -0
  281. package/src/utils/xpath.ts +129 -0
  282. package/dist/bin/explorbot-cli.js.map +0 -1
  283. package/dist/boat/api-tester/bin/apibot-cli.js.map +0 -1
  284. package/dist/boat/api-tester/example/apibot.config.js +0 -31
  285. package/dist/boat/api-tester/example/apibot.config.js.map +0 -1
  286. package/dist/boat/api-tester/src/ai/chief/styles.js.map +0 -1
  287. package/dist/boat/api-tester/src/ai/chief.js.map +0 -1
  288. package/dist/boat/api-tester/src/ai/curler-tools.js.map +0 -1
  289. package/dist/boat/api-tester/src/ai/curler.js.map +0 -1
  290. package/dist/boat/api-tester/src/api-client.js.map +0 -1
  291. package/dist/boat/api-tester/src/apibot.js.map +0 -1
  292. package/dist/boat/api-tester/src/cli.js.map +0 -1
  293. package/dist/boat/api-tester/src/config.js.map +0 -1
  294. package/dist/prompts/audit-rules.md +0 -124
  295. package/dist/src/action-result.js.map +0 -1
  296. package/dist/src/action.js.map +0 -1
  297. package/dist/src/activity.js.map +0 -1
  298. package/dist/src/ai/agent.js.map +0 -1
  299. package/dist/src/ai/bosun.js.map +0 -1
  300. package/dist/src/ai/captain/idle-mode.js.map +0 -1
  301. package/dist/src/ai/captain/mixin.js.map +0 -1
  302. package/dist/src/ai/captain/test-mode.js.map +0 -1
  303. package/dist/src/ai/captain/web-mode.js.map +0 -1
  304. package/dist/src/ai/captain.js.map +0 -1
  305. package/dist/src/ai/conversation.js.map +0 -1
  306. package/dist/src/ai/experience-compactor.js.map +0 -1
  307. package/dist/src/ai/fisherman-tools.js.map +0 -1
  308. package/dist/src/ai/fisherman.js.map +0 -1
  309. package/dist/src/ai/historian.js.map +0 -1
  310. package/dist/src/ai/navigator.js.map +0 -1
  311. package/dist/src/ai/pilot.js.map +0 -1
  312. package/dist/src/ai/planner/session-dedup.js.map +0 -1
  313. package/dist/src/ai/planner/styles.js.map +0 -1
  314. package/dist/src/ai/planner/subpages.js.map +0 -1
  315. package/dist/src/ai/planner.js.map +0 -1
  316. package/dist/src/ai/provider.js.map +0 -1
  317. package/dist/src/ai/quartermaster.js.map +0 -1
  318. package/dist/src/ai/researcher/cache.js.map +0 -1
  319. package/dist/src/ai/researcher/coordinates.js.map +0 -1
  320. package/dist/src/ai/researcher/deep-analysis.js.map +0 -1
  321. package/dist/src/ai/researcher/fingerprint-worker.js.map +0 -1
  322. package/dist/src/ai/researcher/focus.js.map +0 -1
  323. package/dist/src/ai/researcher/locators.js.map +0 -1
  324. package/dist/src/ai/researcher/mixin.js.map +0 -1
  325. package/dist/src/ai/researcher/parser.js.map +0 -1
  326. package/dist/src/ai/researcher/research-result.js.map +0 -1
  327. package/dist/src/ai/researcher.js.map +0 -1
  328. package/dist/src/ai/rules.js.map +0 -1
  329. package/dist/src/ai/task-agent.js.map +0 -1
  330. package/dist/src/ai/tester.js.map +0 -1
  331. package/dist/src/ai/tools.js.map +0 -1
  332. package/dist/src/api/api-client.js.map +0 -1
  333. package/dist/src/api/request-result.js.map +0 -1
  334. package/dist/src/api/request-store.js.map +0 -1
  335. package/dist/src/api/spec-reader.js.map +0 -1
  336. package/dist/src/api/xhr-capture.js.map +0 -1
  337. package/dist/src/browser-server.js.map +0 -1
  338. package/dist/src/command-handler.js.map +0 -1
  339. package/dist/src/commands/add-rule-command.js.map +0 -1
  340. package/dist/src/commands/base-command.js.map +0 -1
  341. package/dist/src/commands/clean-command.js.map +0 -1
  342. package/dist/src/commands/context-aria-command.js.map +0 -1
  343. package/dist/src/commands/context-command.js.map +0 -1
  344. package/dist/src/commands/context-data-command.js.map +0 -1
  345. package/dist/src/commands/context-experience-command.js.map +0 -1
  346. package/dist/src/commands/context-html-command.js.map +0 -1
  347. package/dist/src/commands/context-knowledge-command.js.map +0 -1
  348. package/dist/src/commands/debug-command.js.map +0 -1
  349. package/dist/src/commands/drill-command.js.map +0 -1
  350. package/dist/src/commands/exit-command.js.map +0 -1
  351. package/dist/src/commands/explore-command.js.map +0 -1
  352. package/dist/src/commands/freesail-command.js.map +0 -1
  353. package/dist/src/commands/help-command.js.map +0 -1
  354. package/dist/src/commands/index.js.map +0 -1
  355. package/dist/src/commands/knows-command.js.map +0 -1
  356. package/dist/src/commands/learn-command.js.map +0 -1
  357. package/dist/src/commands/navigate-command.js.map +0 -1
  358. package/dist/src/commands/path-command.js.map +0 -1
  359. package/dist/src/commands/plan-clear-command.js.map +0 -1
  360. package/dist/src/commands/plan-command.js.map +0 -1
  361. package/dist/src/commands/plan-edit-command.js.map +0 -1
  362. package/dist/src/commands/plan-load-command.js.map +0 -1
  363. package/dist/src/commands/plan-reload-command.js.map +0 -1
  364. package/dist/src/commands/plan-save-command.js.map +0 -1
  365. package/dist/src/commands/research-command.js.map +0 -1
  366. package/dist/src/commands/start-command.js.map +0 -1
  367. package/dist/src/commands/status-command.js.map +0 -1
  368. package/dist/src/commands/test-command.js.map +0 -1
  369. package/dist/src/components/ActivityPane.js.map +0 -1
  370. package/dist/src/components/AddKnowledge.js.map +0 -1
  371. package/dist/src/components/AddRule.js.map +0 -1
  372. package/dist/src/components/App.js.map +0 -1
  373. package/dist/src/components/Autocomplete.js.map +0 -1
  374. package/dist/src/components/InputPane.js.map +0 -1
  375. package/dist/src/components/InputReadline.js.map +0 -1
  376. package/dist/src/components/LogPane.js.map +0 -1
  377. package/dist/src/components/PlanEditor.js.map +0 -1
  378. package/dist/src/components/PlanPane.js.map +0 -1
  379. package/dist/src/components/SessionTimer.js.map +0 -1
  380. package/dist/src/components/StateTransitionPane.js.map +0 -1
  381. package/dist/src/components/StatusPane.js.map +0 -1
  382. package/dist/src/components/TaskPane.js.map +0 -1
  383. package/dist/src/components/Welcome.js.map +0 -1
  384. package/dist/src/components/WelcomeChecklist.js.map +0 -1
  385. package/dist/src/components/WelcomeCommands.js.map +0 -1
  386. package/dist/src/components/autocomplete-store.js.map +0 -1
  387. package/dist/src/components/parse-keypress.js.map +0 -1
  388. package/dist/src/config.js.map +0 -1
  389. package/dist/src/execution-controller.js.map +0 -1
  390. package/dist/src/experience-tracker.js.map +0 -1
  391. package/dist/src/explorbot.js.map +0 -1
  392. package/dist/src/explorer.js.map +0 -1
  393. package/dist/src/index.js.map +0 -1
  394. package/dist/src/knowledge-tracker.js.map +0 -1
  395. package/dist/src/observability.js.map +0 -1
  396. package/dist/src/reporter.js.map +0 -1
  397. package/dist/src/state-manager.js.map +0 -1
  398. package/dist/src/stats.js.map +0 -1
  399. package/dist/src/test-plan.js.map +0 -1
  400. package/dist/src/utils/aria.js.map +0 -1
  401. package/dist/src/utils/code-extractor.js.map +0 -1
  402. package/dist/src/utils/context-formatter.js.map +0 -1
  403. package/dist/src/utils/error-page.js.map +0 -1
  404. package/dist/src/utils/expandable.js.map +0 -1
  405. package/dist/src/utils/hooks-runner.js.map +0 -1
  406. package/dist/src/utils/html-diff.js.map +0 -1
  407. package/dist/src/utils/html.js.map +0 -1
  408. package/dist/src/utils/logger.js.map +0 -1
  409. package/dist/src/utils/loop.js.map +0 -1
  410. package/dist/src/utils/markdown-parser.js.map +0 -1
  411. package/dist/src/utils/markdown-query.js.map +0 -1
  412. package/dist/src/utils/markdown-terminal.js.map +0 -1
  413. package/dist/src/utils/research-parser.js.map +0 -1
  414. package/dist/src/utils/retry.js.map +0 -1
  415. package/dist/src/utils/rules-loader.js.map +0 -1
  416. package/dist/src/utils/strings.js.map +0 -1
  417. package/dist/src/utils/test-plan-markdown.js.map +0 -1
  418. package/dist/src/utils/throttle.js.map +0 -1
  419. package/dist/src/utils/unique-names.js.map +0 -1
  420. package/dist/src/utils/url-matcher.js.map +0 -1
  421. package/dist/src/utils/web-element.js.map +0 -1
  422. package/dist/src/utils/xpath.js.map +0 -1
  423. package/prompts/audit-rules.md +0 -124
@@ -174,4 +174,3 @@ export class RequestResult {
174
174
  return cmd;
175
175
  }
176
176
  }
177
- //# sourceMappingURL=request-result.js.map
@@ -106,4 +106,3 @@ export class RequestStore {
106
106
  function normalizePathPattern(urlPath) {
107
107
  return urlPath.replace(/\/[0-9a-f]{24}\b/g, '/{id}').replace(/\/\d+\b/g, '/{id}');
108
108
  }
109
- //# sourceMappingURL=request-store.js.map
@@ -145,4 +145,3 @@ function matchesEndpoint(specPath, endpoint) {
145
145
  return true;
146
146
  return false;
147
147
  }
148
- //# sourceMappingURL=spec-reader.js.map
@@ -88,4 +88,3 @@ export class XhrCapture {
88
88
  this.store.addCapturedRequest(result);
89
89
  }
90
90
  }
91
- //# sourceMappingURL=xhr-capture.js.map
@@ -64,4 +64,3 @@ async function getAliveEndpoint() {
64
64
  return null;
65
65
  }
66
66
  export { readEndpoint, removeEndpointFile, isServerRunning, launchServer, getEndpointFilePath, getAliveEndpoint };
67
- //# sourceMappingURL=browser-server.js.map
@@ -360,4 +360,3 @@ export class CommandHandler {
360
360
  return 0;
361
361
  }
362
362
  }
363
- //# sourceMappingURL=command-handler.js.map
@@ -49,4 +49,3 @@ export class AddRuleCommand extends BaseCommand {
49
49
  return filePath;
50
50
  }
51
51
  }
52
- //# sourceMappingURL=add-rule-command.js.map
@@ -11,4 +11,3 @@ export class BaseCommand {
11
11
  return this.name === commandName || this.aliases.includes(commandName);
12
12
  }
13
13
  }
14
- //# sourceMappingURL=base-command.js.map
@@ -64,4 +64,3 @@ export class CleanCommand extends BaseCommand {
64
64
  tag('success').log(`Cleaned ${count} ${target.description} files from ${dir}`);
65
65
  }
66
66
  }
67
- //# sourceMappingURL=clean-command.js.map
@@ -15,4 +15,3 @@ export class ContextAriaCommand extends BaseCommand {
15
15
  tag('multiline').log(`ARIA Snapshot:\n\n${ariaSnapshot}`);
16
16
  }
17
17
  }
18
- //# sourceMappingURL=context-aria-command.js.map
@@ -15,13 +15,13 @@ export class ContextCommand extends BaseCommand {
15
15
  throw new Error('No active page to show context for');
16
16
  }
17
17
  const isVisual = args.includes('--visual') || args.includes('--screenshot');
18
- await explorer.annotateElements();
18
+ const { ariaSnapshot } = await explorer.annotateElements();
19
19
  if (isVisual) {
20
20
  const cachedResearch = Researcher.getCachedResearch(state);
21
21
  const containers = cachedResearch ? extractValidContainers(cachedResearch) : [];
22
22
  await explorer.visuallyAnnotateElements({ containers });
23
23
  }
24
- const actionResult = await explorer.createAction().capturePageState({ includeScreenshot: isVisual });
24
+ const actionResult = await explorer.createAction().capturePageState({ includeScreenshot: isVisual, ariaSnapshot });
25
25
  const experienceTracker = explorer.getStateManager().getExperienceTracker();
26
26
  const knowledgeTracker = this.explorBot.getKnowledgeTracker();
27
27
  let mode = 'compact';
@@ -54,4 +54,3 @@ export class ContextCommand extends BaseCommand {
54
54
  }
55
55
  }
56
56
  }
57
- //# sourceMappingURL=context-command.js.map
@@ -22,4 +22,3 @@ export class ContextDataCommand extends BaseCommand {
22
22
  tag('multiline').log(table);
23
23
  }
24
24
  }
25
- //# sourceMappingURL=context-data-command.js.map
@@ -38,4 +38,3 @@ export class ContextExperienceCommand extends BaseCommand {
38
38
  tag('multiline').log(lines.join('\n'));
39
39
  }
40
40
  }
41
- //# sourceMappingURL=context-experience-command.js.map
@@ -23,4 +23,3 @@ export class ContextHtmlCommand extends BaseCommand {
23
23
  tag('html').log(html);
24
24
  }
25
25
  }
26
- //# sourceMappingURL=context-html-command.js.map
@@ -33,4 +33,3 @@ export class ContextKnowledgeCommand extends BaseCommand {
33
33
  tag('multiline').log(lines.join('\n'));
34
34
  }
35
35
  }
36
- //# sourceMappingURL=context-knowledge-command.js.map
@@ -9,4 +9,3 @@ export class DebugCommand extends BaseCommand {
9
9
  tag('info').log(`Debug mode ${enabled ? 'enabled' : 'disabled'}`);
10
10
  }
11
11
  }
12
- //# sourceMappingURL=debug-command.js.map
@@ -26,4 +26,3 @@ export class DrillCommand extends BaseCommand {
26
26
  return match ? Number.parseInt(match[1], 10) : undefined;
27
27
  }
28
28
  }
29
- //# sourceMappingURL=drill-command.js.map
@@ -23,4 +23,3 @@ export class ExitCommand extends BaseCommand {
23
23
  process.exit(0);
24
24
  }
25
25
  }
26
- //# sourceMappingURL=exit-command.js.map
@@ -1,6 +1,7 @@
1
1
  import figureSet from 'figures';
2
2
  import path from 'node:path';
3
3
  import { getStyles } from '../ai/planner/styles.js';
4
+ import { getCliName } from "../utils/cli-name.js";
4
5
  import { jsonToTable } from '../utils/markdown-parser.js';
5
6
  import { tag } from '../utils/logger.js';
6
7
  import { BaseCommand } from './base-command.js';
@@ -71,7 +72,7 @@ export class ExploreCommand extends BaseCommand {
71
72
  }
72
73
  }
73
74
  printResults(savedPath) {
74
- const allTests = this.completedPlans.flatMap((plan) => plan.tests.filter((t) => t.status !== 'pending').map((test) => ({ test, planTitle: plan.title })));
75
+ const allTests = this.completedPlans.flatMap((plan) => plan.tests.filter((t) => t.startTime != null).map((test) => ({ test, planTitle: plan.title })));
75
76
  if (allTests.length === 0)
76
77
  return;
77
78
  const hasSubPages = this.completedPlans.length > 1;
@@ -103,7 +104,7 @@ export class ExploreCommand extends BaseCommand {
103
104
  tag('info').log(`${figureSet.tick} ${allTests.length} tests completed`);
104
105
  if (savedPath) {
105
106
  const relativePath = path.relative(process.cwd(), savedPath);
106
- tag('info').log(`Re-run tests: explorbot test ${relativePath} <index>`);
107
+ tag('info').log(`Re-run tests: ${getCliName()} test ${relativePath} <index>`);
107
108
  }
108
109
  }
109
110
  isLimitReached() {
@@ -121,4 +122,3 @@ export class ExploreCommand extends BaseCommand {
121
122
  }
122
123
  }
123
124
  }
124
- //# sourceMappingURL=explore-command.js.map
@@ -81,4 +81,3 @@ function parseArgs(args) {
81
81
  }
82
82
  return { strategy, scope, maxTests };
83
83
  }
84
- //# sourceMappingURL=freesail-command.js.map
@@ -4,4 +4,3 @@ export class HelpCommand extends BaseCommand {
4
4
  description = 'Show available commands';
5
5
  async execute(_args) { }
6
6
  }
7
- //# sourceMappingURL=help-command.js.map
@@ -60,4 +60,3 @@ const commandClasses = [
60
60
  export function createCommands(explorBot) {
61
61
  return commandClasses.map((Cmd) => new Cmd(explorBot));
62
62
  }
63
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,117 @@
1
+ import { existsSync, mkdirSync, statSync, writeFileSync } from 'node:fs';
2
+ import { dirname, extname, join, resolve } from 'node:path';
3
+ import { log, tag } from '../utils/logger.js';
4
+ import dedent from 'dedent';
5
+ import chalk from 'chalk';
6
+ import { getCliName } from "../utils/cli-name.js";
7
+ const DEFAULT_CONFIG_TEMPLATE = `import { createOpenRouter } from '@openrouter/ai-sdk-provider';
8
+ // import { '<your provider here>' } from '<your provider package here>';
9
+
10
+ // Vercel AI SDK is used to connect to AI providers.
11
+ // Bring your own provider or use OpenRouter (one API key, many providers).
12
+ // https://github.com/testomatio/explorbot/blob/main/docs/providers.md
13
+ const openrouter = createOpenRouter({
14
+ apiKey: process.env.OPENROUTER_API_KEY,
15
+ });
16
+
17
+ const config = {
18
+ web: {
19
+ // use application host without path prefix (e.g., http://localhost:3000)
20
+ url: 'http://<your-app-host-here>',
21
+ },
22
+
23
+ ai: {
24
+ // fast model with tool calling capabilities
25
+ model: openrouter('<your base model here>'),
26
+ // vision model for screenshot analysis
27
+ visionModel: openrouter('<your vision model here>'),
28
+ // agentic model for decision making
29
+ agenticModel: openrouter('<your agentic model here>'),
30
+ },
31
+ };
32
+
33
+ export default config;
34
+ `;
35
+ const DEFAULT_ENV_TEMPLATE = dedent `
36
+ # AI provider API keys
37
+ OPENROUTER_API_KEY=
38
+
39
+ # OPENAI_API_KEY=
40
+ # ANTHROPIC_API_KEY=
41
+ # GROQ_API_KEY=
42
+
43
+ # Langfuse Tracing
44
+ LANGFUSE_SECRET_KEY=
45
+ LANGFUSE_PUBLIC_KEY=
46
+ LANGFUSE_BASE_URL=
47
+
48
+ # Testomat.io API key to publish run results
49
+ TESTOMATIO=
50
+ `;
51
+ export function runInitCommand(options) {
52
+ const configPath = options.configPath ?? './explorbot.config.js';
53
+ const force = options.force ?? false;
54
+ const customPath = options.path;
55
+ const originalCwd = process.cwd();
56
+ if (customPath) {
57
+ const dir = resolve(customPath);
58
+ if (!existsSync(dir)) {
59
+ mkdirSync(dir, { recursive: true });
60
+ log(`Created directory: ${dir}`);
61
+ }
62
+ process.chdir(dir);
63
+ log(`Working in directory: ${dir}`);
64
+ }
65
+ try {
66
+ let outPath = resolve(configPath);
67
+ if (existsSync(outPath) && statSync(outPath).isDirectory()) {
68
+ outPath = join(outPath, 'explorbot.config.js');
69
+ }
70
+ else if (!extname(outPath)) {
71
+ outPath = join(outPath, 'explorbot.config.js');
72
+ }
73
+ const dir = dirname(outPath);
74
+ if (!existsSync(dir)) {
75
+ mkdirSync(dir, { recursive: true });
76
+ log(`Created directory: ${dir}`);
77
+ }
78
+ if (existsSync(outPath) && !force) {
79
+ log(`Config file already exists: ${outPath}`);
80
+ log('Use --force to overwrite existing file');
81
+ process.exit(1);
82
+ }
83
+ writeFileSync(outPath, DEFAULT_CONFIG_TEMPLATE, 'utf8');
84
+ log(`Created config file: ${outPath}`);
85
+ const envPath = resolve(process.cwd(), '.env');
86
+ if (!existsSync(envPath)) {
87
+ writeFileSync(envPath, `${DEFAULT_ENV_TEMPLATE}\n`, 'utf8');
88
+ log(`Created env file: ${envPath}`);
89
+ }
90
+ else {
91
+ log(`Env file already exists: ${envPath}`);
92
+ }
93
+ log('');
94
+ log('Next steps:');
95
+ log('1. Configure AI provider in .env');
96
+ log('2. Set AI models config file');
97
+ log('3. Set web application URL in the config file');
98
+ log('4. Add initial knowledge (how to authorize to the application, etc.)');
99
+ tag('substep').log(chalk.yellow(`${getCliName()} learn * 'to aurhorize use these credentials: admin@example.com / secret123'`));
100
+ tag('substep').log('You can use ${env.LOGIN} and ${env.PASSWORD} to reference environment variables.');
101
+ log('5. Launch application on a relative URL');
102
+ tag('substep').log(chalk.yellow(`${getCliName()} start /dashboard`));
103
+ if (!existsSync('./output')) {
104
+ mkdirSync('./output', { recursive: true });
105
+ log('Created directory: ./output');
106
+ }
107
+ }
108
+ catch (error) {
109
+ log('Failed to create config file:', error);
110
+ process.exit(1);
111
+ }
112
+ finally {
113
+ if (process.cwd() !== originalCwd) {
114
+ process.chdir(originalCwd);
115
+ }
116
+ }
117
+ }
@@ -51,4 +51,3 @@ export class KnowsCommand extends BaseCommand {
51
51
  tag('multiline').log(`Found ${matching.length} matching knowledge entries for: ${url}\n\n${formatKnowledgeList(knowledgeList)}`);
52
52
  }
53
53
  }
54
- //# sourceMappingURL=knows-command.js.map
@@ -32,4 +32,3 @@ export class LearnCommand extends BaseCommand {
32
32
  tag('success').log('Knowledge saved for current page');
33
33
  }
34
34
  }
35
- //# sourceMappingURL=learn-command.js.map
@@ -13,4 +13,3 @@ export class NavigateCommand extends BaseCommand {
13
13
  tag('success').log(`Navigation requested: ${destination}`);
14
14
  }
15
15
  }
16
- //# sourceMappingURL=navigate-command.js.map
@@ -67,4 +67,3 @@ export class PathCommand extends BaseCommand {
67
67
  tag('multiline').log(lines.join('\n'));
68
68
  }
69
69
  }
70
- //# sourceMappingURL=path-command.js.map
@@ -10,4 +10,3 @@ export class PlanClearCommand extends BaseCommand {
10
10
  await this.explorBot.plan(args.trim() || undefined, { fresh: true });
11
11
  }
12
12
  }
13
- //# sourceMappingURL=plan-clear-command.js.map
@@ -8,17 +8,22 @@ export class PlanCommand extends BaseCommand {
8
8
  { flags: '--fresh', description: 'Regenerate plan from scratch' },
9
9
  { flags: '--clear', description: 'Clear plan before regenerating' },
10
10
  { flags: '--style <name>', description: 'Planning style (normal, curious, psycho, performer)' },
11
+ { flags: '--focus <feature>', description: 'Focus area for test planning' },
11
12
  ];
12
13
  async execute(args) {
13
14
  const clear = args.includes('--clear');
14
15
  const fresh = args.includes('--fresh') || clear;
15
16
  const styleMatch = args.match(/--style\s+(\S+)/);
16
17
  const style = styleMatch?.[1];
17
- const focus = args
18
+ const focusMatch = args.match(/--focus\s+("[^"]+"|'[^']+'|\S+)/);
19
+ const focusFromFlag = focusMatch?.[1]?.replace(/^["']|["']$/g, '');
20
+ const focusFromText = args
18
21
  .replace('--clear', '')
19
22
  .replace('--fresh', '')
20
23
  .replace(/--style\s+\S+/, '')
24
+ .replace(/--focus\s+("[^"]+"|'[^']+'|\S+)/, '')
21
25
  .trim();
26
+ const focus = focusFromFlag || focusFromText;
22
27
  if (clear) {
23
28
  this.explorBot.clearPlan();
24
29
  tag('success').log('Plan cleared');
@@ -33,4 +38,3 @@ export class PlanCommand extends BaseCommand {
33
38
  }
34
39
  }
35
40
  }
36
- //# sourceMappingURL=plan-command.js.map
@@ -5,4 +5,3 @@ export class PlanEditCommand extends BaseCommand {
5
5
  suggestions = ['/plan:edit - toggle tests on/off'];
6
6
  async execute(_args) { }
7
7
  }
8
- //# sourceMappingURL=plan-edit-command.js.map
@@ -13,4 +13,3 @@ export class PlanLoadCommand extends BaseCommand {
13
13
  tag('success').log(`Plan loaded: ${plan.title} with ${plan.tests.length} tests`);
14
14
  }
15
15
  }
16
- //# sourceMappingURL=plan-load-command.js.map
@@ -20,4 +20,3 @@ export class PlanReloadCommand extends BaseCommand {
20
20
  tag('success').log(`Plan regenerated with ${plan.tests.length} tests`);
21
21
  }
22
22
  }
23
- //# sourceMappingURL=plan-reload-command.js.map
@@ -19,4 +19,3 @@ export class PlanSaveCommand extends BaseCommand {
19
19
  }
20
20
  }
21
21
  }
22
- //# sourceMappingURL=plan-save-command.js.map
@@ -35,4 +35,3 @@ export class ResearchCommand extends BaseCommand {
35
35
  }
36
36
  }
37
37
  }
38
- //# sourceMappingURL=research-command.js.map
@@ -9,4 +9,3 @@ export class StartCommand extends BaseCommand {
9
9
  await new ExploreCommand(this.explorBot).execute(args);
10
10
  }
11
11
  }
12
- //# sourceMappingURL=start-command.js.map
@@ -16,4 +16,3 @@ export class StatusCommand extends BaseCommand {
16
16
  });
17
17
  }
18
18
  }
19
- //# sourceMappingURL=status-command.js.map
@@ -82,4 +82,3 @@ function parseTestIndices(input, total) {
82
82
  }
83
83
  return [...indices].sort((a, b) => a - b);
84
84
  }
85
- //# sourceMappingURL=test-command.js.map
@@ -52,4 +52,3 @@ const ActivityPane = React.memo(({ isInputVisible = false }) => {
52
52
  getDots())));
53
53
  });
54
54
  export default ActivityPane;
55
- //# sourceMappingURL=ActivityPane.js.map
@@ -119,4 +119,3 @@ const AddKnowledge = ({ initialUrl = '', onComplete, onCancel }) => {
119
119
  ": Exit"))));
120
120
  };
121
121
  export default AddKnowledge;
122
- //# sourceMappingURL=AddKnowledge.js.map
@@ -114,4 +114,3 @@ const AddRule = ({ initialAgent = '', initialName = '', onComplete, onCancel })
114
114
  ": Exit"))));
115
115
  };
116
116
  export default AddRule;
117
- //# sourceMappingURL=AddRule.js.map
@@ -310,4 +310,3 @@ export function App({ explorBot, initialShowInput = false, exitOnEmptyInput = fa
310
310
  React.createElement(Autocomplete, null)),
311
311
  React.createElement(PlanPane, { completedPlans: completedPlans, activePlan: activePlanInfo })));
312
312
  }
313
- //# sourceMappingURL=App.js.map
@@ -40,4 +40,3 @@ const Autocomplete = () => {
40
40
  }))))));
41
41
  };
42
42
  export default Autocomplete;
43
- //# sourceMappingURL=Autocomplete.js.map
@@ -204,4 +204,3 @@ const InputPane = ({ commandHandler, exitOnEmptyInput = false, onSubmit, onComma
204
204
  }, visible: showAutocomplete })));
205
205
  };
206
206
  export default InputPane;
207
- //# sourceMappingURL=InputPane.js.map
@@ -595,4 +595,3 @@ const InputReadline = React.memo(({ commandHandler, exitOnEmptyInput = false, on
595
595
  })));
596
596
  });
597
597
  export default InputReadline;
598
- //# sourceMappingURL=InputReadline.js.map
@@ -120,4 +120,3 @@ const LogPane = React.memo(({ verboseMode }) => {
120
120
  return React.createElement(Box, { flexDirection: "column" }, visibleLogs.map((log, index) => renderLogEntry(log, index)).filter(Boolean));
121
121
  });
122
122
  export default LogPane;
123
- //# sourceMappingURL=LogPane.js.map
@@ -123,4 +123,3 @@ const PlanEditor = ({ tasks, onClose, isActive }) => {
123
123
  " enabled"))));
124
124
  };
125
125
  export default PlanEditor;
126
- //# sourceMappingURL=PlanEditor.js.map
@@ -48,4 +48,3 @@ function formatStats(plan) {
48
48
  return parts.join(' ');
49
49
  }
50
50
  export default PlanPane;
51
- //# sourceMappingURL=PlanPane.js.map
@@ -23,4 +23,3 @@ const SessionTimer = ({ startedAt }) => {
23
23
  pad(seconds))));
24
24
  };
25
25
  export default SessionTimer;
26
- //# sourceMappingURL=SessionTimer.js.map
@@ -104,4 +104,3 @@ const StateTransitionPane = ({ transition, currentState }) => {
104
104
  React.createElement(Text, { color: "green" }, diff.to))))))));
105
105
  };
106
106
  export default StateTransitionPane;
107
- //# sourceMappingURL=StateTransitionPane.js.map
@@ -34,4 +34,3 @@ export const StatusPane = ({ onComplete }) => {
34
34
  React.createElement(Row, { label: "Time", value: Stats.getElapsedTime() }),
35
35
  tokenRows.map(([model, tokens]) => (React.createElement(Row, { key: model, label: model, value: `${Stats.humanizeTokens(tokens.total)} tokens` })))))));
36
36
  };
37
- //# sourceMappingURL=StatusPane.js.map
@@ -93,4 +93,3 @@ const TaskPane = React.memo(({ tasks, scrollOffset = 0 }) => {
93
93
  " more")))));
94
94
  });
95
95
  export default TaskPane;
96
- //# sourceMappingURL=TaskPane.js.map
@@ -49,4 +49,3 @@ const Welcome = () => {
49
49
  React.createElement(Text, { color: "cyan", bold: true }, configInfo.playwrightUrl))))));
50
50
  };
51
51
  export default Welcome;
52
- //# sourceMappingURL=Welcome.js.map
@@ -93,4 +93,3 @@ const WelcomeChecklist = ({ config, knowledgeTracker }) => {
93
93
  items.map((item, index) => (React.createElement(ChecklistRow, { key: index, item: item })))));
94
94
  };
95
95
  export default WelcomeChecklist;
96
- //# sourceMappingURL=WelcomeChecklist.js.map
@@ -58,4 +58,3 @@ const WelcomeCommands = ({ hasKnowledge }) => {
58
58
  React.createElement(Text, { color: "gray", dimColor: true }, cmd.examples.join(' '))))))))));
59
59
  };
60
60
  export default WelcomeCommands;
61
- //# sourceMappingURL=WelcomeCommands.js.map
@@ -19,4 +19,3 @@ export const setAutocompleteState = (next) => {
19
19
  }
20
20
  };
21
21
  export const useAutocompleteState = () => useSyncExternalStore(subscribe, getSnapshot);
22
- //# sourceMappingURL=autocomplete-store.js.map
@@ -171,4 +171,3 @@ export default function parseKeypress(value = '') {
171
171
  }
172
172
  return key;
173
173
  }
174
- //# sourceMappingURL=parse-keypress.js.map
@@ -246,4 +246,3 @@ export class ConfigParser {
246
246
  export function outputPath(...segments) {
247
247
  return path.join(ConfigParser.getInstance().getOutputDir(), ...segments);
248
248
  }
249
- //# sourceMappingURL=config.js.map
@@ -89,4 +89,3 @@ export class ExecutionController extends EventEmitter {
89
89
  }
90
90
  }
91
91
  export const executionController = ExecutionController.getInstance();
92
- //# sourceMappingURL=execution-controller.js.map
@@ -291,4 +291,3 @@ ${filteredCode}
291
291
  return results;
292
292
  }
293
293
  }
294
- //# sourceMappingURL=experience-tracker.js.map
@@ -84,7 +84,7 @@ export class ExplorBot {
84
84
  await this.explorer.openFreshTab();
85
85
  }
86
86
  getCurrentState() {
87
- return this.explorer.getStateManager().getCurrentState();
87
+ return this.explorer?.getStateManager().getCurrentState() ?? null;
88
88
  }
89
89
  getExplorer() {
90
90
  return this.explorer;
@@ -345,4 +345,3 @@ export class ExplorBot {
345
345
  this.currentPlan = plan;
346
346
  }
347
347
  }
348
- //# sourceMappingURL=explorbot.js.map