explorbot 0.0.1

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 (329) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +267 -0
  3. package/assets/sample-files/sample.docx +0 -0
  4. package/assets/sample-files/sample.mp3 +0 -0
  5. package/assets/sample-files/sample.mp4 +0 -0
  6. package/assets/sample-files/sample.pdf +21 -0
  7. package/assets/sample-files/sample.png +0 -0
  8. package/assets/sample-files/sample.xlsx +0 -0
  9. package/assets/sample-files/sample.zip +0 -0
  10. package/dist/assets/sample-files/sample.docx +0 -0
  11. package/dist/assets/sample-files/sample.mp3 +0 -0
  12. package/dist/assets/sample-files/sample.mp4 +0 -0
  13. package/dist/assets/sample-files/sample.pdf +21 -0
  14. package/dist/assets/sample-files/sample.png +0 -0
  15. package/dist/assets/sample-files/sample.xlsx +0 -0
  16. package/dist/assets/sample-files/sample.zip +0 -0
  17. package/dist/bin/explorbot-cli.js +683 -0
  18. package/dist/bin/explorbot-cli.js.map +1 -0
  19. package/dist/boat/api-tester/bin/apibot-cli.js +5 -0
  20. package/dist/boat/api-tester/bin/apibot-cli.js.map +1 -0
  21. package/dist/boat/api-tester/example/apibot.config.js +31 -0
  22. package/dist/boat/api-tester/example/apibot.config.js.map +1 -0
  23. package/dist/boat/api-tester/src/ai/chief/styles.js +13 -0
  24. package/dist/boat/api-tester/src/ai/chief/styles.js.map +1 -0
  25. package/dist/boat/api-tester/src/ai/chief.js +301 -0
  26. package/dist/boat/api-tester/src/ai/chief.js.map +1 -0
  27. package/dist/boat/api-tester/src/ai/curler-tools.js +263 -0
  28. package/dist/boat/api-tester/src/ai/curler-tools.js.map +1 -0
  29. package/dist/boat/api-tester/src/ai/curler.js +271 -0
  30. package/dist/boat/api-tester/src/ai/curler.js.map +1 -0
  31. package/dist/boat/api-tester/src/api-client.js +26 -0
  32. package/dist/boat/api-tester/src/api-client.js.map +1 -0
  33. package/dist/boat/api-tester/src/apibot.js +166 -0
  34. package/dist/boat/api-tester/src/apibot.js.map +1 -0
  35. package/dist/boat/api-tester/src/cli.js +262 -0
  36. package/dist/boat/api-tester/src/cli.js.map +1 -0
  37. package/dist/boat/api-tester/src/config.js +159 -0
  38. package/dist/boat/api-tester/src/config.js.map +1 -0
  39. package/dist/prompts/audit-rules.md +124 -0
  40. package/dist/rules/chief/general.md +11 -0
  41. package/dist/rules/chief/styles/curious.md +12 -0
  42. package/dist/rules/chief/styles/hacker.md +19 -0
  43. package/dist/rules/chief/styles/normal.md +11 -0
  44. package/dist/rules/chief/styles/psycho.md +17 -0
  45. package/dist/rules/navigator/multiple-locator.md +47 -0
  46. package/dist/rules/navigator/output.md +69 -0
  47. package/dist/rules/navigator/verification-actions.md +122 -0
  48. package/dist/rules/navigator/verification-output.md +53 -0
  49. package/dist/rules/planner/styles/curious.md +39 -0
  50. package/dist/rules/planner/styles/normal.md +21 -0
  51. package/dist/rules/planner/styles/psycho.md +14 -0
  52. package/dist/rules/researcher/list-element.md +11 -0
  53. package/dist/rules/researcher/screenshot-ui-map.md +30 -0
  54. package/dist/rules/researcher/section-ui-map.md +18 -0
  55. package/dist/rules/researcher/ui-map-table.md +18 -0
  56. package/dist/src/action-result.js +574 -0
  57. package/dist/src/action-result.js.map +1 -0
  58. package/dist/src/action.js +388 -0
  59. package/dist/src/action.js.map +1 -0
  60. package/dist/src/activity.js +86 -0
  61. package/dist/src/activity.js.map +1 -0
  62. package/dist/src/ai/agent.js +2 -0
  63. package/dist/src/ai/agent.js.map +1 -0
  64. package/dist/src/ai/bosun.js +443 -0
  65. package/dist/src/ai/bosun.js.map +1 -0
  66. package/dist/src/ai/captain/idle-mode.js +102 -0
  67. package/dist/src/ai/captain/idle-mode.js.map +1 -0
  68. package/dist/src/ai/captain/mixin.js +11 -0
  69. package/dist/src/ai/captain/mixin.js.map +1 -0
  70. package/dist/src/ai/captain/test-mode.js +251 -0
  71. package/dist/src/ai/captain/test-mode.js.map +1 -0
  72. package/dist/src/ai/captain/web-mode.js +124 -0
  73. package/dist/src/ai/captain/web-mode.js.map +1 -0
  74. package/dist/src/ai/captain.js +442 -0
  75. package/dist/src/ai/captain.js.map +1 -0
  76. package/dist/src/ai/conversation.js +176 -0
  77. package/dist/src/ai/conversation.js.map +1 -0
  78. package/dist/src/ai/experience-compactor.js +232 -0
  79. package/dist/src/ai/experience-compactor.js.map +1 -0
  80. package/dist/src/ai/fisherman-tools.js +154 -0
  81. package/dist/src/ai/fisherman-tools.js.map +1 -0
  82. package/dist/src/ai/fisherman.js +184 -0
  83. package/dist/src/ai/fisherman.js.map +1 -0
  84. package/dist/src/ai/historian.js +384 -0
  85. package/dist/src/ai/historian.js.map +1 -0
  86. package/dist/src/ai/navigator.js +493 -0
  87. package/dist/src/ai/navigator.js.map +1 -0
  88. package/dist/src/ai/pilot.js +684 -0
  89. package/dist/src/ai/pilot.js.map +1 -0
  90. package/dist/src/ai/planner/session-dedup.js +28 -0
  91. package/dist/src/ai/planner/session-dedup.js.map +1 -0
  92. package/dist/src/ai/planner/styles.js +15 -0
  93. package/dist/src/ai/planner/styles.js.map +1 -0
  94. package/dist/src/ai/planner/subpages.js +118 -0
  95. package/dist/src/ai/planner/subpages.js.map +1 -0
  96. package/dist/src/ai/planner.js +486 -0
  97. package/dist/src/ai/planner.js.map +1 -0
  98. package/dist/src/ai/provider.js +540 -0
  99. package/dist/src/ai/provider.js.map +1 -0
  100. package/dist/src/ai/quartermaster.js +210 -0
  101. package/dist/src/ai/quartermaster.js.map +1 -0
  102. package/dist/src/ai/researcher/cache.js +95 -0
  103. package/dist/src/ai/researcher/cache.js.map +1 -0
  104. package/dist/src/ai/researcher/coordinates.js +210 -0
  105. package/dist/src/ai/researcher/coordinates.js.map +1 -0
  106. package/dist/src/ai/researcher/deep-analysis.js +364 -0
  107. package/dist/src/ai/researcher/deep-analysis.js.map +1 -0
  108. package/dist/src/ai/researcher/fingerprint-worker.js +46 -0
  109. package/dist/src/ai/researcher/fingerprint-worker.js.map +1 -0
  110. package/dist/src/ai/researcher/focus.js +37 -0
  111. package/dist/src/ai/researcher/focus.js.map +1 -0
  112. package/dist/src/ai/researcher/locators.js +242 -0
  113. package/dist/src/ai/researcher/locators.js.map +1 -0
  114. package/dist/src/ai/researcher/mixin.js +3 -0
  115. package/dist/src/ai/researcher/mixin.js.map +1 -0
  116. package/dist/src/ai/researcher/parser.js +160 -0
  117. package/dist/src/ai/researcher/parser.js.map +1 -0
  118. package/dist/src/ai/researcher/research-result.js +110 -0
  119. package/dist/src/ai/researcher/research-result.js.map +1 -0
  120. package/dist/src/ai/researcher.js +776 -0
  121. package/dist/src/ai/researcher.js.map +1 -0
  122. package/dist/src/ai/rules.js +368 -0
  123. package/dist/src/ai/rules.js.map +1 -0
  124. package/dist/src/ai/task-agent.js +110 -0
  125. package/dist/src/ai/task-agent.js.map +1 -0
  126. package/dist/src/ai/tester.js +840 -0
  127. package/dist/src/ai/tester.js.map +1 -0
  128. package/dist/src/ai/tools.js +980 -0
  129. package/dist/src/ai/tools.js.map +1 -0
  130. package/dist/src/api/api-client.js +91 -0
  131. package/dist/src/api/api-client.js.map +1 -0
  132. package/dist/src/api/request-result.js +177 -0
  133. package/dist/src/api/request-result.js.map +1 -0
  134. package/dist/src/api/request-store.js +109 -0
  135. package/dist/src/api/request-store.js.map +1 -0
  136. package/dist/src/api/spec-reader.js +148 -0
  137. package/dist/src/api/spec-reader.js.map +1 -0
  138. package/dist/src/api/xhr-capture.js +91 -0
  139. package/dist/src/api/xhr-capture.js.map +1 -0
  140. package/dist/src/browser-server.js +67 -0
  141. package/dist/src/browser-server.js.map +1 -0
  142. package/dist/src/command-handler.js +363 -0
  143. package/dist/src/command-handler.js.map +1 -0
  144. package/dist/src/commands/add-rule-command.js +52 -0
  145. package/dist/src/commands/add-rule-command.js.map +1 -0
  146. package/dist/src/commands/base-command.js +14 -0
  147. package/dist/src/commands/base-command.js.map +1 -0
  148. package/dist/src/commands/clean-command.js +67 -0
  149. package/dist/src/commands/clean-command.js.map +1 -0
  150. package/dist/src/commands/context-aria-command.js +18 -0
  151. package/dist/src/commands/context-aria-command.js.map +1 -0
  152. package/dist/src/commands/context-command.js +57 -0
  153. package/dist/src/commands/context-command.js.map +1 -0
  154. package/dist/src/commands/context-data-command.js +25 -0
  155. package/dist/src/commands/context-data-command.js.map +1 -0
  156. package/dist/src/commands/context-experience-command.js +41 -0
  157. package/dist/src/commands/context-experience-command.js.map +1 -0
  158. package/dist/src/commands/context-html-command.js +26 -0
  159. package/dist/src/commands/context-html-command.js.map +1 -0
  160. package/dist/src/commands/context-knowledge-command.js +36 -0
  161. package/dist/src/commands/context-knowledge-command.js.map +1 -0
  162. package/dist/src/commands/debug-command.js +12 -0
  163. package/dist/src/commands/debug-command.js.map +1 -0
  164. package/dist/src/commands/drill-command.js +29 -0
  165. package/dist/src/commands/drill-command.js.map +1 -0
  166. package/dist/src/commands/exit-command.js +26 -0
  167. package/dist/src/commands/exit-command.js.map +1 -0
  168. package/dist/src/commands/explore-command.js +124 -0
  169. package/dist/src/commands/explore-command.js.map +1 -0
  170. package/dist/src/commands/freesail-command.js +84 -0
  171. package/dist/src/commands/freesail-command.js.map +1 -0
  172. package/dist/src/commands/help-command.js +7 -0
  173. package/dist/src/commands/help-command.js.map +1 -0
  174. package/dist/src/commands/index.js +63 -0
  175. package/dist/src/commands/index.js.map +1 -0
  176. package/dist/src/commands/knows-command.js +54 -0
  177. package/dist/src/commands/knows-command.js.map +1 -0
  178. package/dist/src/commands/learn-command.js +35 -0
  179. package/dist/src/commands/learn-command.js.map +1 -0
  180. package/dist/src/commands/navigate-command.js +16 -0
  181. package/dist/src/commands/navigate-command.js.map +1 -0
  182. package/dist/src/commands/path-command.js +70 -0
  183. package/dist/src/commands/path-command.js.map +1 -0
  184. package/dist/src/commands/plan-clear-command.js +13 -0
  185. package/dist/src/commands/plan-clear-command.js.map +1 -0
  186. package/dist/src/commands/plan-command.js +36 -0
  187. package/dist/src/commands/plan-command.js.map +1 -0
  188. package/dist/src/commands/plan-edit-command.js +8 -0
  189. package/dist/src/commands/plan-edit-command.js.map +1 -0
  190. package/dist/src/commands/plan-load-command.js +16 -0
  191. package/dist/src/commands/plan-load-command.js.map +1 -0
  192. package/dist/src/commands/plan-reload-command.js +23 -0
  193. package/dist/src/commands/plan-reload-command.js.map +1 -0
  194. package/dist/src/commands/plan-save-command.js +22 -0
  195. package/dist/src/commands/plan-save-command.js.map +1 -0
  196. package/dist/src/commands/research-command.js +38 -0
  197. package/dist/src/commands/research-command.js.map +1 -0
  198. package/dist/src/commands/start-command.js +12 -0
  199. package/dist/src/commands/start-command.js.map +1 -0
  200. package/dist/src/commands/status-command.js +19 -0
  201. package/dist/src/commands/status-command.js.map +1 -0
  202. package/dist/src/commands/test-command.js +85 -0
  203. package/dist/src/commands/test-command.js.map +1 -0
  204. package/dist/src/components/ActivityPane.js +55 -0
  205. package/dist/src/components/ActivityPane.js.map +1 -0
  206. package/dist/src/components/AddKnowledge.js +122 -0
  207. package/dist/src/components/AddKnowledge.js.map +1 -0
  208. package/dist/src/components/AddRule.js +117 -0
  209. package/dist/src/components/AddRule.js.map +1 -0
  210. package/dist/src/components/App.js +313 -0
  211. package/dist/src/components/App.js.map +1 -0
  212. package/dist/src/components/Autocomplete.js +43 -0
  213. package/dist/src/components/Autocomplete.js.map +1 -0
  214. package/dist/src/components/InputPane.js +207 -0
  215. package/dist/src/components/InputPane.js.map +1 -0
  216. package/dist/src/components/InputReadline.js +598 -0
  217. package/dist/src/components/InputReadline.js.map +1 -0
  218. package/dist/src/components/LogPane.js +123 -0
  219. package/dist/src/components/LogPane.js.map +1 -0
  220. package/dist/src/components/PlanEditor.js +126 -0
  221. package/dist/src/components/PlanEditor.js.map +1 -0
  222. package/dist/src/components/PlanPane.js +51 -0
  223. package/dist/src/components/PlanPane.js.map +1 -0
  224. package/dist/src/components/SessionTimer.js +26 -0
  225. package/dist/src/components/SessionTimer.js.map +1 -0
  226. package/dist/src/components/StateTransitionPane.js +107 -0
  227. package/dist/src/components/StateTransitionPane.js.map +1 -0
  228. package/dist/src/components/StatusPane.js +37 -0
  229. package/dist/src/components/StatusPane.js.map +1 -0
  230. package/dist/src/components/TaskPane.js +96 -0
  231. package/dist/src/components/TaskPane.js.map +1 -0
  232. package/dist/src/components/Welcome.js +52 -0
  233. package/dist/src/components/Welcome.js.map +1 -0
  234. package/dist/src/components/WelcomeChecklist.js +96 -0
  235. package/dist/src/components/WelcomeChecklist.js.map +1 -0
  236. package/dist/src/components/WelcomeCommands.js +61 -0
  237. package/dist/src/components/WelcomeCommands.js.map +1 -0
  238. package/dist/src/components/autocomplete-store.js +22 -0
  239. package/dist/src/components/autocomplete-store.js.map +1 -0
  240. package/dist/src/components/parse-keypress.js +174 -0
  241. package/dist/src/components/parse-keypress.js.map +1 -0
  242. package/dist/src/config.js +249 -0
  243. package/dist/src/config.js.map +1 -0
  244. package/dist/src/execution-controller.js +92 -0
  245. package/dist/src/execution-controller.js.map +1 -0
  246. package/dist/src/experience-tracker.js +294 -0
  247. package/dist/src/experience-tracker.js.map +1 -0
  248. package/dist/src/explorbot.js +348 -0
  249. package/dist/src/explorbot.js.map +1 -0
  250. package/dist/src/explorer.js +611 -0
  251. package/dist/src/explorer.js.map +1 -0
  252. package/dist/src/index.js +56 -0
  253. package/dist/src/index.js.map +1 -0
  254. package/dist/src/knowledge-tracker.js +184 -0
  255. package/dist/src/knowledge-tracker.js.map +1 -0
  256. package/dist/src/observability.js +126 -0
  257. package/dist/src/observability.js.map +1 -0
  258. package/dist/src/reporter.js +185 -0
  259. package/dist/src/reporter.js.map +1 -0
  260. package/dist/src/state-manager.js +427 -0
  261. package/dist/src/state-manager.js.map +1 -0
  262. package/dist/src/stats.js +44 -0
  263. package/dist/src/stats.js.map +1 -0
  264. package/dist/src/test-plan.js +343 -0
  265. package/dist/src/test-plan.js.map +1 -0
  266. package/dist/src/utils/aria.js +588 -0
  267. package/dist/src/utils/aria.js.map +1 -0
  268. package/dist/src/utils/code-extractor.js +21 -0
  269. package/dist/src/utils/code-extractor.js.map +1 -0
  270. package/dist/src/utils/context-formatter.js +205 -0
  271. package/dist/src/utils/context-formatter.js.map +1 -0
  272. package/dist/src/utils/error-page.js +19 -0
  273. package/dist/src/utils/error-page.js.map +1 -0
  274. package/dist/src/utils/expandable.js +35 -0
  275. package/dist/src/utils/expandable.js.map +1 -0
  276. package/dist/src/utils/hooks-runner.js +77 -0
  277. package/dist/src/utils/hooks-runner.js.map +1 -0
  278. package/dist/src/utils/html-diff.js +734 -0
  279. package/dist/src/utils/html-diff.js.map +1 -0
  280. package/dist/src/utils/html.js +1163 -0
  281. package/dist/src/utils/html.js.map +1 -0
  282. package/dist/src/utils/logger.js +465 -0
  283. package/dist/src/utils/logger.js.map +1 -0
  284. package/dist/src/utils/loop.js +126 -0
  285. package/dist/src/utils/loop.js.map +1 -0
  286. package/dist/src/utils/markdown-parser.js +117 -0
  287. package/dist/src/utils/markdown-parser.js.map +1 -0
  288. package/dist/src/utils/markdown-query.js +393 -0
  289. package/dist/src/utils/markdown-query.js.map +1 -0
  290. package/dist/src/utils/markdown-terminal.js +40 -0
  291. package/dist/src/utils/markdown-terminal.js.map +1 -0
  292. package/dist/src/utils/research-parser.js +2 -0
  293. package/dist/src/utils/research-parser.js.map +1 -0
  294. package/dist/src/utils/retry.js +55 -0
  295. package/dist/src/utils/retry.js.map +1 -0
  296. package/dist/src/utils/rules-loader.js +104 -0
  297. package/dist/src/utils/rules-loader.js.map +1 -0
  298. package/dist/src/utils/strings.js +14 -0
  299. package/dist/src/utils/strings.js.map +1 -0
  300. package/dist/src/utils/test-plan-markdown.js +301 -0
  301. package/dist/src/utils/test-plan-markdown.js.map +1 -0
  302. package/dist/src/utils/throttle.js +16 -0
  303. package/dist/src/utils/throttle.js.map +1 -0
  304. package/dist/src/utils/unique-names.js +13 -0
  305. package/dist/src/utils/unique-names.js.map +1 -0
  306. package/dist/src/utils/url-matcher.js +48 -0
  307. package/dist/src/utils/url-matcher.js.map +1 -0
  308. package/dist/src/utils/web-element.js +131 -0
  309. package/dist/src/utils/web-element.js.map +1 -0
  310. package/dist/src/utils/xpath.js +110 -0
  311. package/dist/src/utils/xpath.js.map +1 -0
  312. package/package.json +119 -0
  313. package/prompts/audit-rules.md +124 -0
  314. package/rules/chief/general.md +11 -0
  315. package/rules/chief/styles/curious.md +12 -0
  316. package/rules/chief/styles/hacker.md +19 -0
  317. package/rules/chief/styles/normal.md +11 -0
  318. package/rules/chief/styles/psycho.md +17 -0
  319. package/rules/navigator/multiple-locator.md +47 -0
  320. package/rules/navigator/output.md +69 -0
  321. package/rules/navigator/verification-actions.md +122 -0
  322. package/rules/navigator/verification-output.md +53 -0
  323. package/rules/planner/styles/curious.md +39 -0
  324. package/rules/planner/styles/normal.md +21 -0
  325. package/rules/planner/styles/psycho.md +14 -0
  326. package/rules/researcher/list-element.md +11 -0
  327. package/rules/researcher/screenshot-ui-map.md +30 -0
  328. package/rules/researcher/section-ui-map.md +18 -0
  329. package/rules/researcher/ui-map-table.md +18 -0
@@ -0,0 +1,52 @@
1
+ import { Box, Text } from 'ink';
2
+ import React from 'react';
3
+ import { useEffect, useState } from 'react';
4
+ import { ConfigParser } from '../config.js';
5
+ const Welcome = () => {
6
+ const [configInfo, setConfigInfo] = useState({
7
+ aiProvider: '',
8
+ playwrightUrl: '',
9
+ loaded: false,
10
+ });
11
+ useEffect(() => {
12
+ const loadConfig = async () => {
13
+ try {
14
+ const configParser = ConfigParser.getInstance();
15
+ const loadedConfig = await configParser.loadConfig();
16
+ let aiProviderName = 'Not configured';
17
+ if (loadedConfig.ai?.model) {
18
+ const model = loadedConfig.ai.model;
19
+ aiProviderName = model?.modelId || model?.provider || 'configured';
20
+ }
21
+ setConfigInfo({
22
+ aiProvider: aiProviderName,
23
+ playwrightUrl: loadedConfig.playwright?.url || 'Not configured',
24
+ loaded: true,
25
+ });
26
+ }
27
+ catch (error) {
28
+ setConfigInfo({
29
+ aiProvider: '',
30
+ playwrightUrl: '',
31
+ loaded: true,
32
+ error: error instanceof Error ? error.message : 'Unknown error',
33
+ });
34
+ }
35
+ };
36
+ loadConfig();
37
+ }, []);
38
+ return (React.createElement(Box, { flexDirection: "column", padding: 1 },
39
+ React.createElement(Box, { marginBottom: 1, alignItems: "center" },
40
+ React.createElement(Text, { color: "yellow", bold: true }, "\uD83E\uDDD0 Let's do some exploratory testing!")),
41
+ configInfo.loaded && !configInfo.error && (React.createElement(Box, { flexDirection: "row", marginTop: 1 },
42
+ React.createElement(Box, { marginRight: 2 },
43
+ React.createElement(Text, { color: "gray", bold: true }, "[Config]")),
44
+ React.createElement(Box, { marginRight: 2 },
45
+ React.createElement(Text, { color: "gray" }, "AI: "),
46
+ React.createElement(Text, { color: "cyan", bold: true }, configInfo.aiProvider)),
47
+ React.createElement(Box, null,
48
+ React.createElement(Text, { color: "gray" }, "URL: "),
49
+ React.createElement(Text, { color: "cyan", bold: true }, configInfo.playwrightUrl))))));
50
+ };
51
+ export default Welcome;
52
+ //# sourceMappingURL=Welcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Welcome.js","sourceRoot":"","sources":["../../../src/components/Welcome.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAS5C,MAAM,OAAO,GAAa,GAAG,EAAE;IAC7B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAa;QACvD,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;gBAChD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;gBAErD,IAAI,cAAc,GAAG,gBAAgB,CAAC;gBACtC,IAAI,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC;oBACpC,cAAc,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,QAAQ,IAAI,YAAY,CAAC;gBACrE,CAAC;gBAED,aAAa,CAAC;oBACZ,UAAU,EAAE,cAAc;oBAC1B,aAAa,EAAE,YAAY,CAAC,UAAU,EAAE,GAAG,IAAI,gBAAgB;oBAC/D,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC;oBACZ,UAAU,EAAE,EAAE;oBACd,aAAa,EAAE,EAAE;oBACjB,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;QACpC,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ;YACvC,oBAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,4DAElB,CACH;QACL,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CACzC,oBAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,SAAS,EAAE,CAAC;YACnC,oBAAC,GAAG,IAAC,WAAW,EAAE,CAAC;gBACjB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,qBAEhB,CACH;YAEN,oBAAC,GAAG,IAAC,WAAW,EAAE,CAAC;gBACjB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,WAAY;gBAC9B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,UACpB,UAAU,CAAC,UAAU,CACjB,CACH;YACN,oBAAC,GAAG;gBACF,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAa;gBAC/B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,UACpB,UAAU,CAAC,aAAa,CACpB,CACH,CACF,CACP,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { Box, Text } from 'ink';
2
+ import React from 'react';
3
+ import { Reporter } from '../reporter.js';
4
+ const ChecklistRow = ({ item }) => (React.createElement(Box, null,
5
+ React.createElement(Text, { color: item.enabled ? 'green' : 'gray' }, item.enabled ? ' ✓ ' : ' ○ '),
6
+ React.createElement(Text, { color: item.enabled ? 'white' : 'gray' }, item.label),
7
+ item.value && React.createElement(Text, { color: "cyan" },
8
+ " (",
9
+ item.value,
10
+ ")"),
11
+ React.createElement(Text, { color: "gray" },
12
+ " - ",
13
+ item.description),
14
+ !item.enabled && item.suggestion && React.createElement(Text, { color: "yellow" },
15
+ " \u2192 ",
16
+ item.suggestion)));
17
+ function getModelLabel(model) {
18
+ if (!model)
19
+ return undefined;
20
+ const modelId = model?.modelId;
21
+ const provider = model?.provider;
22
+ if (!modelId)
23
+ return undefined;
24
+ if (provider)
25
+ return `${provider}:${modelId}`;
26
+ return modelId;
27
+ }
28
+ const WelcomeChecklist = ({ config, knowledgeTracker }) => {
29
+ const knowledge = knowledgeTracker.listAllKnowledge();
30
+ const knowledgeCount = knowledge.length;
31
+ const langfusePublicKey = config.ai?.langfuse?.publicKey || process.env.LANGFUSE_PUBLIC_KEY;
32
+ const langfuseSecretKey = config.ai?.langfuse?.secretKey || process.env.LANGFUSE_SECRET_KEY;
33
+ const langfuseEnabled = config.ai?.langfuse?.enabled ?? Boolean(langfusePublicKey && langfuseSecretKey);
34
+ const items = [
35
+ {
36
+ label: 'Model',
37
+ description: 'default model for all agents',
38
+ enabled: Boolean(config.ai?.model),
39
+ value: getModelLabel(config.ai?.model),
40
+ suggestion: 'set ai.model in config',
41
+ },
42
+ {
43
+ label: 'Vision model',
44
+ description: 'analyze screenshots for visual assertions',
45
+ enabled: Boolean(config.ai?.visionModel || config.ai?.vision),
46
+ value: getModelLabel(config.ai?.visionModel),
47
+ suggestion: 'set ai.visionModel in config',
48
+ },
49
+ {
50
+ label: 'Agentic model',
51
+ description: 'smarter model for Captain & Pilot decisions',
52
+ enabled: Boolean(config.ai?.agenticModel),
53
+ value: getModelLabel(config.ai?.agenticModel),
54
+ suggestion: 'set ai.agenticModel in config',
55
+ },
56
+ {
57
+ label: 'Knowledge',
58
+ description: 'teach AI web app usage, pass credentials',
59
+ enabled: knowledgeCount > 0,
60
+ value: knowledgeCount > 0 ? `${knowledgeCount} file${knowledgeCount > 1 ? 's' : ''}` : undefined,
61
+ suggestion: 'use /learn',
62
+ },
63
+ {
64
+ label: 'Reporter',
65
+ description: 'get a complete test run report',
66
+ enabled: Reporter.resolveEnabled(config.reporter),
67
+ value: process.env.TESTOMATIO ? 'cloud report to Testomat.io' : undefined,
68
+ suggestion: 'set reporter.enabled in config',
69
+ },
70
+ {
71
+ label: 'Quartermaster',
72
+ description: 'additional a11y checks',
73
+ enabled: config.ai?.agents?.quartermaster?.enabled === true || config.agents?.quartermaster?.enabled === true,
74
+ suggestion: 'enable ai.agents.quartermaster',
75
+ },
76
+ {
77
+ label: 'Fisherman',
78
+ description: 'prepare test data via API',
79
+ enabled: config.ai?.agents?.fisherman?.enabled === true || !!config.api,
80
+ value: config.api ? 'achieve mode' : 'replicate mode',
81
+ suggestion: 'enable ai.agents.fisherman or configure api section',
82
+ },
83
+ {
84
+ label: 'Langfuse',
85
+ description: 'collect execution reports and analyze failures',
86
+ enabled: langfuseEnabled,
87
+ suggestion: 'enable ai.langfuse',
88
+ },
89
+ ];
90
+ return (React.createElement(Box, { borderStyle: "round", borderColor: "gray", flexDirection: "column", paddingX: 1 },
91
+ React.createElement(Box, { marginBottom: 1 },
92
+ React.createElement(Text, { color: "cyan", bold: true }, "Configuration")),
93
+ items.map((item, index) => (React.createElement(ChecklistRow, { key: index, item: item })))));
94
+ };
95
+ export default WelcomeChecklist;
96
+ //# sourceMappingURL=WelcomeChecklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeChecklist.js","sourceRoot":"","sources":["../../../src/components/WelcomeChecklist.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Box, Text } from 'ink';
2
+ import React from 'react';
3
+ const Command = ({ text }) => (React.createElement(Text, { bold: true, color: "#9B59B6" }, text));
4
+ const WelcomeCommands = ({ hasKnowledge }) => {
5
+ const commands = [
6
+ {
7
+ command: '/explore',
8
+ description: 'AI creates test plan and runs all tests automatically',
9
+ examples: ['/explore', '/explore checkout flow'],
10
+ },
11
+ {
12
+ command: '/plan',
13
+ description: 'generate test scenarios for current page without running them',
14
+ examples: ['/plan', '/plan user registration'],
15
+ },
16
+ {
17
+ command: '/test',
18
+ description: 'run tests from current plan (requires /plan first)',
19
+ examples: ['/test', '/test 2', '/test *'],
20
+ },
21
+ {
22
+ command: '/navigate',
23
+ description: 'AI navigates to a specific page or state',
24
+ examples: ['/navigate /users/settings'],
25
+ },
26
+ {
27
+ command: '/research',
28
+ description: 'analyze current page and list available actions',
29
+ },
30
+ ];
31
+ const knowledgeCommand = {
32
+ command: '/learn',
33
+ description: 'add knowledge about your app (credentials, workflows)',
34
+ examples: ['/learn login uses admin@test.com'],
35
+ };
36
+ return (React.createElement(Box, { flexDirection: "column", paddingX: 1, marginTop: 1 },
37
+ React.createElement(Box, { marginBottom: 1 },
38
+ React.createElement(Text, null, "What should we do next?")),
39
+ !hasKnowledge && (React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
40
+ React.createElement(Box, null,
41
+ React.createElement(Text, { color: "yellow" }, "\u2192 "),
42
+ React.createElement(Text, null, "Start by adding knowledge about your app:")),
43
+ React.createElement(Box, { paddingLeft: 2 },
44
+ React.createElement(Command, { text: knowledgeCommand.command }),
45
+ React.createElement(Text, { color: "gray" },
46
+ " - ",
47
+ knowledgeCommand.description)),
48
+ knowledgeCommand.examples && (React.createElement(Box, { paddingLeft: 4 },
49
+ React.createElement(Text, { color: "gray", dimColor: true }, knowledgeCommand.examples.join(' ')))))),
50
+ React.createElement(Box, { flexDirection: "column" }, commands.map((cmd, index) => (React.createElement(Box, { key: index, flexDirection: "column" },
51
+ React.createElement(Box, null,
52
+ React.createElement(Text, null, " "),
53
+ React.createElement(Command, { text: cmd.command }),
54
+ React.createElement(Text, { color: "gray" },
55
+ " - ",
56
+ cmd.description)),
57
+ cmd.examples && (React.createElement(Box, { paddingLeft: 4 },
58
+ React.createElement(Text, { color: "gray", dimColor: true }, cmd.examples.join(' '))))))))));
59
+ };
60
+ export default WelcomeCommands;
61
+ //# sourceMappingURL=WelcomeCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeCommands.js","sourceRoot":"","sources":["../../../src/components/WelcomeCommands.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,MAAM,OAAO,GAA+B,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACxD,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,IACvB,IAAI,CACA,CACR,CAAC;AAEF,MAAM,eAAe,GAAmC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC3E,MAAM,QAAQ,GAAkB;QAC9B;YACE,OAAO,EAAE,UAAU;YACnB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,CAAC,UAAU,EAAE,wBAAwB,CAAC;SACjD;QACD;YACE,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,+DAA+D;YAC5E,QAAQ,EAAE,CAAC,OAAO,EAAE,yBAAyB,CAAC;SAC/C;QACD;YACE,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,oDAAoD;YACjE,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;SAC1C;QACD;YACE,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,CAAC,2BAA2B,CAAC;SACxC;QACD;YACE,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,iDAAiD;SAC/D;KACF,CAAC;IAEF,MAAM,gBAAgB,GAAgB;QACpC,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,uDAAuD;QACpE,QAAQ,EAAE,CAAC,kCAAkC,CAAC;KAC/C,CAAC;IAEF,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QACnD,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;YAClB,oBAAC,IAAI,kCAA+B,CAChC;QAEL,CAAC,YAAY,IAAI,CAChB,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC;YACzC,oBAAC,GAAG;gBACF,oBAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,cAAU;gBAC9B,oBAAC,IAAI,oDAAiD,CAClD;YACN,oBAAC,GAAG,IAAC,WAAW,EAAE,CAAC;gBACjB,oBAAC,OAAO,IAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,GAAI;gBAC3C,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;oBAAK,gBAAgB,CAAC,WAAW,CAAQ,CACvD;YACL,gBAAgB,CAAC,QAAQ,IAAI,CAC5B,oBAAC,GAAG,IAAC,WAAW,EAAE,CAAC;gBACjB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,UACxB,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC,CACH,CACP,CACG,CACP;QAED,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,IACxB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,oBAAC,GAAG,IAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAC,QAAQ;YACrC,oBAAC,GAAG;gBACF,oBAAC,IAAI,YAAS;gBACd,oBAAC,OAAO,IAAC,IAAI,EAAE,GAAG,CAAC,OAAO,GAAI;gBAC9B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;oBAAK,GAAG,CAAC,WAAW,CAAQ,CAC1C;YACL,GAAG,CAAC,QAAQ,IAAI,CACf,oBAAC,GAAG,IAAC,WAAW,EAAE,CAAC;gBACjB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,UACxB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CACnB,CACH,CACP,CACG,CACP,CAAC,CACE,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { useSyncExternalStore } from 'react';
2
+ const listeners = new Set();
3
+ let state = {
4
+ suggestions: [],
5
+ selectedIndex: 0,
6
+ visible: false,
7
+ };
8
+ const subscribe = (listener) => {
9
+ listeners.add(listener);
10
+ return () => {
11
+ listeners.delete(listener);
12
+ };
13
+ };
14
+ const getSnapshot = () => state;
15
+ export const setAutocompleteState = (next) => {
16
+ state = next;
17
+ for (const listener of listeners) {
18
+ listener();
19
+ }
20
+ };
21
+ export const useAutocompleteState = () => useSyncExternalStore(subscribe, getSnapshot);
22
+ //# sourceMappingURL=autocomplete-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-store.js","sourceRoot":"","sources":["../../../src/components/autocomplete-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAU7C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,IAAI,KAAK,GAAsB;IAC7B,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAoB,EAAE,EAAE;IACzC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;AAEhC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAuB,EAAE,EAAE;IAC9D,KAAK,GAAG,IAAI,CAAC;IACb,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { Buffer } from 'node:buffer';
2
+ const metaCharRe = /^[a-zA-Z0-9]$/;
3
+ const fnKeyRe = /^(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/;
4
+ const keyName = {
5
+ OP: 'f1',
6
+ OQ: 'f2',
7
+ OR: 'f3',
8
+ OS: 'f4',
9
+ '[11~': 'f1',
10
+ '[12~': 'f2',
11
+ '[13~': 'f3',
12
+ '[14~': 'f4',
13
+ '[[A': 'f1',
14
+ '[[B': 'f2',
15
+ '[[C': 'f3',
16
+ '[[D': 'f4',
17
+ '[[E': 'f5',
18
+ '[15~': 'f5',
19
+ '[17~': 'f6',
20
+ '[18~': 'f7',
21
+ '[19~': 'f8',
22
+ '[20~': 'f9',
23
+ '[21~': 'f10',
24
+ '[23~': 'f11',
25
+ '[24~': 'f12',
26
+ '[A': 'up',
27
+ '[B': 'down',
28
+ '[C': 'right',
29
+ '[D': 'left',
30
+ '[E': 'clear',
31
+ '[F': 'end',
32
+ '[H': 'home',
33
+ OA: 'up',
34
+ OB: 'down',
35
+ OC: 'right',
36
+ OD: 'left',
37
+ OE: 'clear',
38
+ OF: 'end',
39
+ OH: 'home',
40
+ '[1~': 'home',
41
+ '[2~': 'insert',
42
+ '[3~': 'delete',
43
+ '[4~': 'end',
44
+ '[5~': 'pageup',
45
+ '[6~': 'pagedown',
46
+ '[[5~': 'pageup',
47
+ '[[6~': 'pagedown',
48
+ '[7~': 'home',
49
+ '[8~': 'end',
50
+ '[a': 'up',
51
+ '[b': 'down',
52
+ '[c': 'right',
53
+ '[d': 'left',
54
+ '[e': 'clear',
55
+ '[2$': 'insert',
56
+ '[3$': 'delete',
57
+ '[5$': 'pageup',
58
+ '[6$': 'pagedown',
59
+ '[7$': 'home',
60
+ '[8$': 'end',
61
+ Oa: 'up',
62
+ Ob: 'down',
63
+ Oc: 'right',
64
+ Od: 'left',
65
+ Oe: 'clear',
66
+ '[2^': 'insert',
67
+ '[3^': 'delete',
68
+ '[5^': 'pageup',
69
+ '[6^': 'pagedown',
70
+ '[7^': 'home',
71
+ '[8^': 'end',
72
+ '[Z': 'tab',
73
+ };
74
+ export const nonAlphanumericKeys = [...Object.values(keyName), 'backspace'];
75
+ const isShiftKey = (code) => ['[a', '[b', '[c', '[d', '[e', '[2$', '[3$', '[5$', '[6$', '[7$', '[8$', '[Z'].includes(code);
76
+ const isCtrlKey = (code) => ['Oa', 'Ob', 'Oc', 'Od', 'Oe', '[2^', '[3^', '[5^', '[6^', '[7^', '[8^'].includes(code);
77
+ export default function parseKeypress(value = '') {
78
+ let parts;
79
+ let sequence = value;
80
+ if (Buffer.isBuffer(sequence)) {
81
+ if (sequence[0] > 127 && sequence[1] === undefined) {
82
+ sequence[0] -= 128;
83
+ sequence = `\x1b${String(sequence)}`;
84
+ }
85
+ else {
86
+ sequence = String(sequence);
87
+ }
88
+ }
89
+ else if (sequence !== undefined && typeof sequence !== 'string') {
90
+ sequence = String(sequence);
91
+ }
92
+ else if (!sequence) {
93
+ sequence = '';
94
+ }
95
+ const key = {
96
+ name: '',
97
+ ctrl: false,
98
+ meta: false,
99
+ shift: false,
100
+ option: false,
101
+ sequence,
102
+ raw: sequence,
103
+ code: undefined,
104
+ };
105
+ if (sequence === '\r') {
106
+ key.raw = undefined;
107
+ key.name = 'return';
108
+ }
109
+ else if (sequence === '\n') {
110
+ key.name = 'enter';
111
+ }
112
+ else if (sequence === '\t') {
113
+ key.name = 'tab';
114
+ }
115
+ else if (sequence === '\b' || sequence === '\x1b\b') {
116
+ key.name = 'backspace';
117
+ key.meta = sequence.charAt(0) === '\x1b';
118
+ }
119
+ else if (sequence === '\x7f' || sequence === '\x1b\x7f') {
120
+ key.name = 'backspace';
121
+ key.meta = sequence.charAt(0) === '\x1b';
122
+ }
123
+ else if (sequence === '\x1b' || sequence === '\x1b\x1b') {
124
+ key.name = 'escape';
125
+ key.meta = sequence.length === 2;
126
+ }
127
+ else if (sequence === ' ' || sequence === '\x1b ') {
128
+ key.name = 'space';
129
+ key.meta = sequence.length === 2;
130
+ }
131
+ else if (sequence.length === 1 && sequence <= '\x1a') {
132
+ key.name = String.fromCharCode(sequence.charCodeAt(0) + 'a'.charCodeAt(0) - 1);
133
+ key.ctrl = true;
134
+ }
135
+ else if (sequence.length === 1 && sequence >= '0' && sequence <= '9') {
136
+ key.name = 'number';
137
+ }
138
+ else if (sequence.length === 1 && sequence >= 'a' && sequence <= 'z') {
139
+ key.name = sequence;
140
+ }
141
+ else if (sequence.length === 1 && sequence >= 'A' && sequence <= 'Z') {
142
+ key.name = sequence.toLowerCase();
143
+ key.shift = true;
144
+ }
145
+ else if (sequence.startsWith('\x1b') && sequence.length === 2 && metaCharRe.test(sequence[1] || '')) {
146
+ key.meta = true;
147
+ key.shift = /^[A-Z]$/.test(sequence[1] || '');
148
+ }
149
+ else {
150
+ let escapePrefixLength = 0;
151
+ while (sequence[escapePrefixLength] === '\x1b') {
152
+ escapePrefixLength += 1;
153
+ }
154
+ const sequenceBody = sequence.slice(escapePrefixLength);
155
+ parts = fnKeyRe.exec(sequenceBody);
156
+ if (!parts) {
157
+ return key;
158
+ }
159
+ if (escapePrefixLength > 1) {
160
+ key.option = true;
161
+ }
162
+ const code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join('');
163
+ const modifier = Number(parts[3] || parts[5] || 1) - 1;
164
+ key.ctrl = Boolean(modifier & 4);
165
+ key.meta = Boolean(modifier & 10);
166
+ key.shift = Boolean(modifier & 1);
167
+ key.code = code;
168
+ key.name = keyName[code] || '';
169
+ key.shift = isShiftKey(code) || key.shift;
170
+ key.ctrl = isCtrlKey(code) || key.ctrl;
171
+ }
172
+ return key;
173
+ }
174
+ //# sourceMappingURL=parse-keypress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-keypress.js","sourceRoot":"","sources":["../../../src/components/parse-keypress.ts"],"names":[],"mappings":"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"}