prose-qa 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 (427) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +570 -0
  3. package/dist/agent/bash.d.ts +52 -0
  4. package/dist/agent/bash.d.ts.map +1 -0
  5. package/dist/agent/bash.js +186 -0
  6. package/dist/agent/bash.js.map +1 -0
  7. package/dist/agent/bash.test.d.ts +2 -0
  8. package/dist/agent/bash.test.d.ts.map +1 -0
  9. package/dist/agent/bash.test.js +70 -0
  10. package/dist/agent/bash.test.js.map +1 -0
  11. package/dist/agent/llm-model.d.ts +5 -0
  12. package/dist/agent/llm-model.d.ts.map +1 -0
  13. package/dist/agent/llm-model.js +29 -0
  14. package/dist/agent/llm-model.js.map +1 -0
  15. package/dist/agent/llm-model.test.d.ts +2 -0
  16. package/dist/agent/llm-model.test.d.ts.map +1 -0
  17. package/dist/agent/llm-model.test.js +28 -0
  18. package/dist/agent/llm-model.test.js.map +1 -0
  19. package/dist/agent/prompt.d.ts +17 -0
  20. package/dist/agent/prompt.d.ts.map +1 -0
  21. package/dist/agent/prompt.js +97 -0
  22. package/dist/agent/prompt.js.map +1 -0
  23. package/dist/agent/prompt.test.d.ts +2 -0
  24. package/dist/agent/prompt.test.d.ts.map +1 -0
  25. package/dist/agent/prompt.test.js +124 -0
  26. package/dist/agent/prompt.test.js.map +1 -0
  27. package/dist/agent/provider-options.d.ts +8 -0
  28. package/dist/agent/provider-options.d.ts.map +1 -0
  29. package/dist/agent/provider-options.js +115 -0
  30. package/dist/agent/provider-options.js.map +1 -0
  31. package/dist/agent/provider-options.test.d.ts +2 -0
  32. package/dist/agent/provider-options.test.d.ts.map +1 -0
  33. package/dist/agent/provider-options.test.js +114 -0
  34. package/dist/agent/provider-options.test.js.map +1 -0
  35. package/dist/agent/runner.d.ts +27 -0
  36. package/dist/agent/runner.d.ts.map +1 -0
  37. package/dist/agent/runner.js +291 -0
  38. package/dist/agent/runner.js.map +1 -0
  39. package/dist/agent/verdict-retry-prompt.d.ts +3 -0
  40. package/dist/agent/verdict-retry-prompt.d.ts.map +1 -0
  41. package/dist/agent/verdict-retry-prompt.js +18 -0
  42. package/dist/agent/verdict-retry-prompt.js.map +1 -0
  43. package/dist/agent/verdict-retry-prompt.test.d.ts +2 -0
  44. package/dist/agent/verdict-retry-prompt.test.d.ts.map +1 -0
  45. package/dist/agent/verdict-retry-prompt.test.js +25 -0
  46. package/dist/agent/verdict-retry-prompt.test.js.map +1 -0
  47. package/dist/agent/verdict.d.ts +31 -0
  48. package/dist/agent/verdict.d.ts.map +1 -0
  49. package/dist/agent/verdict.js +123 -0
  50. package/dist/agent/verdict.js.map +1 -0
  51. package/dist/agent/verdict.test.d.ts +2 -0
  52. package/dist/agent/verdict.test.d.ts.map +1 -0
  53. package/dist/agent/verdict.test.js +156 -0
  54. package/dist/agent/verdict.test.js.map +1 -0
  55. package/dist/analyze/build-context.d.ts +58 -0
  56. package/dist/analyze/build-context.d.ts.map +1 -0
  57. package/dist/analyze/build-context.js +141 -0
  58. package/dist/analyze/build-context.js.map +1 -0
  59. package/dist/analyze/build-context.test.d.ts +2 -0
  60. package/dist/analyze/build-context.test.d.ts.map +1 -0
  61. package/dist/analyze/build-context.test.js +118 -0
  62. package/dist/analyze/build-context.test.js.map +1 -0
  63. package/dist/analyze/compare-runs.d.ts +49 -0
  64. package/dist/analyze/compare-runs.d.ts.map +1 -0
  65. package/dist/analyze/compare-runs.js +214 -0
  66. package/dist/analyze/compare-runs.js.map +1 -0
  67. package/dist/analyze/compare-runs.test.d.ts +2 -0
  68. package/dist/analyze/compare-runs.test.d.ts.map +1 -0
  69. package/dist/analyze/compare-runs.test.js +139 -0
  70. package/dist/analyze/compare-runs.test.js.map +1 -0
  71. package/dist/analyze/diff-hunks.d.ts +16 -0
  72. package/dist/analyze/diff-hunks.d.ts.map +1 -0
  73. package/dist/analyze/diff-hunks.js +287 -0
  74. package/dist/analyze/diff-hunks.js.map +1 -0
  75. package/dist/analyze/diff-hunks.test.d.ts +2 -0
  76. package/dist/analyze/diff-hunks.test.d.ts.map +1 -0
  77. package/dist/analyze/diff-hunks.test.js +54 -0
  78. package/dist/analyze/diff-hunks.test.js.map +1 -0
  79. package/dist/analyze/hunk-editor.d.ts +8 -0
  80. package/dist/analyze/hunk-editor.d.ts.map +1 -0
  81. package/dist/analyze/hunk-editor.js +129 -0
  82. package/dist/analyze/hunk-editor.js.map +1 -0
  83. package/dist/analyze/hunk-editor.test.d.ts +2 -0
  84. package/dist/analyze/hunk-editor.test.d.ts.map +1 -0
  85. package/dist/analyze/hunk-editor.test.js +48 -0
  86. package/dist/analyze/hunk-editor.test.js.map +1 -0
  87. package/dist/analyze/index.d.ts +23 -0
  88. package/dist/analyze/index.d.ts.map +1 -0
  89. package/dist/analyze/index.js +122 -0
  90. package/dist/analyze/index.js.map +1 -0
  91. package/dist/analyze/llm-fix.d.ts +11 -0
  92. package/dist/analyze/llm-fix.d.ts.map +1 -0
  93. package/dist/analyze/llm-fix.js +76 -0
  94. package/dist/analyze/llm-fix.js.map +1 -0
  95. package/dist/analyze/parse-proposal.d.ts +41 -0
  96. package/dist/analyze/parse-proposal.d.ts.map +1 -0
  97. package/dist/analyze/parse-proposal.js +53 -0
  98. package/dist/analyze/parse-proposal.js.map +1 -0
  99. package/dist/analyze/parse-proposal.test.d.ts +2 -0
  100. package/dist/analyze/parse-proposal.test.d.ts.map +1 -0
  101. package/dist/analyze/parse-proposal.test.js +40 -0
  102. package/dist/analyze/parse-proposal.test.js.map +1 -0
  103. package/dist/analyze/repl.d.ts +28 -0
  104. package/dist/analyze/repl.d.ts.map +1 -0
  105. package/dist/analyze/repl.js +284 -0
  106. package/dist/analyze/repl.js.map +1 -0
  107. package/dist/analyze/repl.test.d.ts +2 -0
  108. package/dist/analyze/repl.test.d.ts.map +1 -0
  109. package/dist/analyze/repl.test.js +101 -0
  110. package/dist/analyze/repl.test.js.map +1 -0
  111. package/dist/analyze/suggest.d.ts +5 -0
  112. package/dist/analyze/suggest.d.ts.map +1 -0
  113. package/dist/analyze/suggest.js +75 -0
  114. package/dist/analyze/suggest.js.map +1 -0
  115. package/dist/analyze/suggest.test.d.ts +2 -0
  116. package/dist/analyze/suggest.test.d.ts.map +1 -0
  117. package/dist/analyze/suggest.test.js +53 -0
  118. package/dist/analyze/suggest.test.js.map +1 -0
  119. package/dist/analyze/validate-markdown.d.ts +3 -0
  120. package/dist/analyze/validate-markdown.d.ts.map +1 -0
  121. package/dist/analyze/validate-markdown.js +25 -0
  122. package/dist/analyze/validate-markdown.js.map +1 -0
  123. package/dist/artifacts/policy.d.ts +9 -0
  124. package/dist/artifacts/policy.d.ts.map +1 -0
  125. package/dist/artifacts/policy.js +46 -0
  126. package/dist/artifacts/policy.js.map +1 -0
  127. package/dist/artifacts/policy.test.d.ts +2 -0
  128. package/dist/artifacts/policy.test.d.ts.map +1 -0
  129. package/dist/artifacts/policy.test.js +73 -0
  130. package/dist/artifacts/policy.test.js.map +1 -0
  131. package/dist/auth/resolve.d.ts +22 -0
  132. package/dist/auth/resolve.d.ts.map +1 -0
  133. package/dist/auth/resolve.js +148 -0
  134. package/dist/auth/resolve.js.map +1 -0
  135. package/dist/auth/store.d.ts +23 -0
  136. package/dist/auth/store.d.ts.map +1 -0
  137. package/dist/auth/store.js +103 -0
  138. package/dist/auth/store.js.map +1 -0
  139. package/dist/cache/generate.d.ts +8 -0
  140. package/dist/cache/generate.d.ts.map +1 -0
  141. package/dist/cache/generate.js +61 -0
  142. package/dist/cache/generate.js.map +1 -0
  143. package/dist/cache/hash.d.ts +5 -0
  144. package/dist/cache/hash.d.ts.map +1 -0
  145. package/dist/cache/hash.js +21 -0
  146. package/dist/cache/hash.js.map +1 -0
  147. package/dist/cache/hash.test.d.ts +2 -0
  148. package/dist/cache/hash.test.d.ts.map +1 -0
  149. package/dist/cache/hash.test.js +42 -0
  150. package/dist/cache/hash.test.js.map +1 -0
  151. package/dist/cache/resolve.d.ts +5 -0
  152. package/dist/cache/resolve.d.ts.map +1 -0
  153. package/dist/cache/resolve.js +8 -0
  154. package/dist/cache/resolve.js.map +1 -0
  155. package/dist/cache/store.d.ts +20 -0
  156. package/dist/cache/store.d.ts.map +1 -0
  157. package/dist/cache/store.js +90 -0
  158. package/dist/cache/store.js.map +1 -0
  159. package/dist/cache/store.test.d.ts +2 -0
  160. package/dist/cache/store.test.d.ts.map +1 -0
  161. package/dist/cache/store.test.js +101 -0
  162. package/dist/cache/store.test.js.map +1 -0
  163. package/dist/cli/analyze.d.ts +21 -0
  164. package/dist/cli/analyze.d.ts.map +1 -0
  165. package/dist/cli/analyze.js +148 -0
  166. package/dist/cli/analyze.js.map +1 -0
  167. package/dist/cli/concurrency.d.ts +17 -0
  168. package/dist/cli/concurrency.d.ts.map +1 -0
  169. package/dist/cli/concurrency.js +56 -0
  170. package/dist/cli/concurrency.js.map +1 -0
  171. package/dist/cli/concurrency.test.d.ts +2 -0
  172. package/dist/cli/concurrency.test.d.ts.map +1 -0
  173. package/dist/cli/concurrency.test.js +74 -0
  174. package/dist/cli/concurrency.test.js.map +1 -0
  175. package/dist/cli/config.d.ts +2 -0
  176. package/dist/cli/config.d.ts.map +1 -0
  177. package/dist/cli/config.js +14 -0
  178. package/dist/cli/config.js.map +1 -0
  179. package/dist/cli/help.d.ts +23 -0
  180. package/dist/cli/help.d.ts.map +1 -0
  181. package/dist/cli/help.js +458 -0
  182. package/dist/cli/help.js.map +1 -0
  183. package/dist/cli/help.test.d.ts +2 -0
  184. package/dist/cli/help.test.d.ts.map +1 -0
  185. package/dist/cli/help.test.js +41 -0
  186. package/dist/cli/help.test.js.map +1 -0
  187. package/dist/cli/index.d.ts +3 -0
  188. package/dist/cli/index.d.ts.map +1 -0
  189. package/dist/cli/index.js +300 -0
  190. package/dist/cli/index.js.map +1 -0
  191. package/dist/cli/mcp.d.ts +6 -0
  192. package/dist/cli/mcp.d.ts.map +1 -0
  193. package/dist/cli/mcp.js +17 -0
  194. package/dist/cli/mcp.js.map +1 -0
  195. package/dist/cli/record.d.ts +27 -0
  196. package/dist/cli/record.d.ts.map +1 -0
  197. package/dist/cli/record.js +244 -0
  198. package/dist/cli/record.js.map +1 -0
  199. package/dist/cli/run.d.ts +11 -0
  200. package/dist/cli/run.d.ts.map +1 -0
  201. package/dist/cli/run.js +676 -0
  202. package/dist/cli/run.js.map +1 -0
  203. package/dist/cli/subprocess.d.ts +19 -0
  204. package/dist/cli/subprocess.d.ts.map +1 -0
  205. package/dist/cli/subprocess.js +142 -0
  206. package/dist/cli/subprocess.js.map +1 -0
  207. package/dist/cli/subprocess.test.d.ts +2 -0
  208. package/dist/cli/subprocess.test.d.ts.map +1 -0
  209. package/dist/cli/subprocess.test.js +76 -0
  210. package/dist/cli/subprocess.test.js.map +1 -0
  211. package/dist/cli/tags.d.ts +5 -0
  212. package/dist/cli/tags.d.ts.map +1 -0
  213. package/dist/cli/tags.js +33 -0
  214. package/dist/cli/tags.js.map +1 -0
  215. package/dist/cli/tags.test.d.ts +2 -0
  216. package/dist/cli/tags.test.d.ts.map +1 -0
  217. package/dist/cli/tags.test.js +31 -0
  218. package/dist/cli/tags.test.js.map +1 -0
  219. package/dist/config/env-vars.d.ts +2 -0
  220. package/dist/config/env-vars.d.ts.map +1 -0
  221. package/dist/config/env-vars.js +14 -0
  222. package/dist/config/env-vars.js.map +1 -0
  223. package/dist/config/env.d.ts +2 -0
  224. package/dist/config/env.d.ts.map +1 -0
  225. package/dist/config/env.js +9 -0
  226. package/dist/config/env.js.map +1 -0
  227. package/dist/config/lightpanda.d.ts +6 -0
  228. package/dist/config/lightpanda.d.ts.map +1 -0
  229. package/dist/config/lightpanda.js +38 -0
  230. package/dist/config/lightpanda.js.map +1 -0
  231. package/dist/config/lightpanda.test.d.ts +2 -0
  232. package/dist/config/lightpanda.test.d.ts.map +1 -0
  233. package/dist/config/lightpanda.test.js +46 -0
  234. package/dist/config/lightpanda.test.js.map +1 -0
  235. package/dist/config/load.d.ts +22 -0
  236. package/dist/config/load.d.ts.map +1 -0
  237. package/dist/config/load.js +242 -0
  238. package/dist/config/load.js.map +1 -0
  239. package/dist/config/load.test.d.ts +2 -0
  240. package/dist/config/load.test.d.ts.map +1 -0
  241. package/dist/config/load.test.js +86 -0
  242. package/dist/config/load.test.js.map +1 -0
  243. package/dist/config/set.d.ts +8 -0
  244. package/dist/config/set.d.ts.map +1 -0
  245. package/dist/config/set.js +93 -0
  246. package/dist/config/set.js.map +1 -0
  247. package/dist/config/set.test.d.ts +2 -0
  248. package/dist/config/set.test.d.ts.map +1 -0
  249. package/dist/config/set.test.js +98 -0
  250. package/dist/config/set.test.js.map +1 -0
  251. package/dist/healing/classify.d.ts +15 -0
  252. package/dist/healing/classify.d.ts.map +1 -0
  253. package/dist/healing/classify.js +209 -0
  254. package/dist/healing/classify.js.map +1 -0
  255. package/dist/healing/classify.test.d.ts +2 -0
  256. package/dist/healing/classify.test.d.ts.map +1 -0
  257. package/dist/healing/classify.test.js +167 -0
  258. package/dist/healing/classify.test.js.map +1 -0
  259. package/dist/healing/recovery-prompt.d.ts +3 -0
  260. package/dist/healing/recovery-prompt.d.ts.map +1 -0
  261. package/dist/healing/recovery-prompt.js +22 -0
  262. package/dist/healing/recovery-prompt.js.map +1 -0
  263. package/dist/mcp/inline-scenario.d.ts +13 -0
  264. package/dist/mcp/inline-scenario.d.ts.map +1 -0
  265. package/dist/mcp/inline-scenario.js +23 -0
  266. package/dist/mcp/inline-scenario.js.map +1 -0
  267. package/dist/mcp/server.d.ts +4 -0
  268. package/dist/mcp/server.d.ts.map +1 -0
  269. package/dist/mcp/server.js +186 -0
  270. package/dist/mcp/server.js.map +1 -0
  271. package/dist/mcp/skill.d.ts +5 -0
  272. package/dist/mcp/skill.d.ts.map +1 -0
  273. package/dist/mcp/skill.js +38 -0
  274. package/dist/mcp/skill.js.map +1 -0
  275. package/dist/mcp/skill.test.d.ts +2 -0
  276. package/dist/mcp/skill.test.d.ts.map +1 -0
  277. package/dist/mcp/skill.test.js +18 -0
  278. package/dist/mcp/skill.test.js.map +1 -0
  279. package/dist/paths.d.ts +12 -0
  280. package/dist/paths.d.ts.map +1 -0
  281. package/dist/paths.js +61 -0
  282. package/dist/paths.js.map +1 -0
  283. package/dist/prompt/load.d.ts +4 -0
  284. package/dist/prompt/load.d.ts.map +1 -0
  285. package/dist/prompt/load.js +19 -0
  286. package/dist/prompt/load.js.map +1 -0
  287. package/dist/recorder/bridge-process.d.ts +14 -0
  288. package/dist/recorder/bridge-process.d.ts.map +1 -0
  289. package/dist/recorder/bridge-process.js +133 -0
  290. package/dist/recorder/bridge-process.js.map +1 -0
  291. package/dist/recorder/bridge-process.test.d.ts +2 -0
  292. package/dist/recorder/bridge-process.test.d.ts.map +1 -0
  293. package/dist/recorder/bridge-process.test.js +36 -0
  294. package/dist/recorder/bridge-process.test.js.map +1 -0
  295. package/dist/recorder/bridge-worker.d.ts +2 -0
  296. package/dist/recorder/bridge-worker.d.ts.map +1 -0
  297. package/dist/recorder/bridge-worker.js +76 -0
  298. package/dist/recorder/bridge-worker.js.map +1 -0
  299. package/dist/recorder/bridge.d.ts +12 -0
  300. package/dist/recorder/bridge.d.ts.map +1 -0
  301. package/dist/recorder/bridge.js +61 -0
  302. package/dist/recorder/bridge.js.map +1 -0
  303. package/dist/recorder/bridge.test.d.ts +2 -0
  304. package/dist/recorder/bridge.test.d.ts.map +1 -0
  305. package/dist/recorder/bridge.test.js +21 -0
  306. package/dist/recorder/bridge.test.js.map +1 -0
  307. package/dist/recorder/enrich-event.d.ts +31 -0
  308. package/dist/recorder/enrich-event.d.ts.map +1 -0
  309. package/dist/recorder/enrich-event.js +91 -0
  310. package/dist/recorder/enrich-event.js.map +1 -0
  311. package/dist/recorder/events.d.ts +11 -0
  312. package/dist/recorder/events.d.ts.map +1 -0
  313. package/dist/recorder/events.js +42 -0
  314. package/dist/recorder/events.js.map +1 -0
  315. package/dist/recorder/events.test.d.ts +2 -0
  316. package/dist/recorder/events.test.d.ts.map +1 -0
  317. package/dist/recorder/events.test.js +40 -0
  318. package/dist/recorder/events.test.js.map +1 -0
  319. package/dist/recorder/generate-scenario.d.ts +16 -0
  320. package/dist/recorder/generate-scenario.d.ts.map +1 -0
  321. package/dist/recorder/generate-scenario.js +78 -0
  322. package/dist/recorder/generate-scenario.js.map +1 -0
  323. package/dist/recorder/in-page-helpers.d.ts +6 -0
  324. package/dist/recorder/in-page-helpers.d.ts.map +1 -0
  325. package/dist/recorder/in-page-helpers.js +238 -0
  326. package/dist/recorder/in-page-helpers.js.map +1 -0
  327. package/dist/recorder/in-page-helpers.test.d.ts +2 -0
  328. package/dist/recorder/in-page-helpers.test.d.ts.map +1 -0
  329. package/dist/recorder/in-page-helpers.test.js +186 -0
  330. package/dist/recorder/in-page-helpers.test.js.map +1 -0
  331. package/dist/recorder/page-script.d.ts +7 -0
  332. package/dist/recorder/page-script.d.ts.map +1 -0
  333. package/dist/recorder/page-script.js +132 -0
  334. package/dist/recorder/page-script.js.map +1 -0
  335. package/dist/recorder/redact.d.ts +8 -0
  336. package/dist/recorder/redact.d.ts.map +1 -0
  337. package/dist/recorder/redact.js +26 -0
  338. package/dist/recorder/redact.js.map +1 -0
  339. package/dist/recorder/redact.test.d.ts +2 -0
  340. package/dist/recorder/redact.test.d.ts.map +1 -0
  341. package/dist/recorder/redact.test.js +27 -0
  342. package/dist/recorder/redact.test.js.map +1 -0
  343. package/dist/recorder/session.d.ts +8 -0
  344. package/dist/recorder/session.d.ts.map +1 -0
  345. package/dist/recorder/session.js +28 -0
  346. package/dist/recorder/session.js.map +1 -0
  347. package/dist/recorder/snapshot-match.d.ts +22 -0
  348. package/dist/recorder/snapshot-match.d.ts.map +1 -0
  349. package/dist/recorder/snapshot-match.js +102 -0
  350. package/dist/recorder/snapshot-match.js.map +1 -0
  351. package/dist/recorder/snapshot-match.test.d.ts +2 -0
  352. package/dist/recorder/snapshot-match.test.d.ts.map +1 -0
  353. package/dist/recorder/snapshot-match.test.js +34 -0
  354. package/dist/recorder/snapshot-match.test.js.map +1 -0
  355. package/dist/redact/env-secrets.d.ts +14 -0
  356. package/dist/redact/env-secrets.d.ts.map +1 -0
  357. package/dist/redact/env-secrets.js +86 -0
  358. package/dist/redact/env-secrets.js.map +1 -0
  359. package/dist/redact/env-secrets.test.d.ts +2 -0
  360. package/dist/redact/env-secrets.test.d.ts.map +1 -0
  361. package/dist/redact/env-secrets.test.js +103 -0
  362. package/dist/redact/env-secrets.test.js.map +1 -0
  363. package/dist/reporter/export.d.ts +14 -0
  364. package/dist/reporter/export.d.ts.map +1 -0
  365. package/dist/reporter/export.js +53 -0
  366. package/dist/reporter/export.js.map +1 -0
  367. package/dist/reporter/export.test.d.ts +2 -0
  368. package/dist/reporter/export.test.d.ts.map +1 -0
  369. package/dist/reporter/export.test.js +100 -0
  370. package/dist/reporter/export.test.js.map +1 -0
  371. package/dist/reporter/index.d.ts +11 -0
  372. package/dist/reporter/index.d.ts.map +1 -0
  373. package/dist/reporter/index.js +161 -0
  374. package/dist/reporter/index.js.map +1 -0
  375. package/dist/reporter/index.test.d.ts +2 -0
  376. package/dist/reporter/index.test.d.ts.map +1 -0
  377. package/dist/reporter/index.test.js +61 -0
  378. package/dist/reporter/index.test.js.map +1 -0
  379. package/dist/scenarios/globs.d.ts +15 -0
  380. package/dist/scenarios/globs.d.ts.map +1 -0
  381. package/dist/scenarios/globs.js +48 -0
  382. package/dist/scenarios/globs.js.map +1 -0
  383. package/dist/scenarios/globs.test.d.ts +2 -0
  384. package/dist/scenarios/globs.test.d.ts.map +1 -0
  385. package/dist/scenarios/globs.test.js +53 -0
  386. package/dist/scenarios/globs.test.js.map +1 -0
  387. package/dist/scenarios/parser.d.ts +15 -0
  388. package/dist/scenarios/parser.d.ts.map +1 -0
  389. package/dist/scenarios/parser.js +278 -0
  390. package/dist/scenarios/parser.js.map +1 -0
  391. package/dist/scenarios/parser.test.d.ts +2 -0
  392. package/dist/scenarios/parser.test.d.ts.map +1 -0
  393. package/dist/scenarios/parser.test.js +373 -0
  394. package/dist/scenarios/parser.test.js.map +1 -0
  395. package/dist/skills/loader.d.ts +10 -0
  396. package/dist/skills/loader.d.ts.map +1 -0
  397. package/dist/skills/loader.js +98 -0
  398. package/dist/skills/loader.js.map +1 -0
  399. package/dist/types/config.d.ts +131 -0
  400. package/dist/types/config.d.ts.map +1 -0
  401. package/dist/types/config.js +2 -0
  402. package/dist/types/config.js.map +1 -0
  403. package/dist/types/recorder.d.ts +71 -0
  404. package/dist/types/recorder.d.ts.map +1 -0
  405. package/dist/types/recorder.js +2 -0
  406. package/dist/types/recorder.js.map +1 -0
  407. package/dist/types/scenario.d.ts +41 -0
  408. package/dist/types/scenario.d.ts.map +1 -0
  409. package/dist/types/scenario.js +2 -0
  410. package/dist/types/scenario.js.map +1 -0
  411. package/dist/types/skill.d.ts +20 -0
  412. package/dist/types/skill.d.ts.map +1 -0
  413. package/dist/types/skill.js +13 -0
  414. package/dist/types/skill.js.map +1 -0
  415. package/dist/types/verdict.d.ts +82 -0
  416. package/dist/types/verdict.d.ts.map +1 -0
  417. package/dist/types/verdict.js +13 -0
  418. package/dist/types/verdict.js.map +1 -0
  419. package/package.json +75 -0
  420. package/pqa.config.ts +82 -0
  421. package/prompt/ANALYZE-FLAKY.md +62 -0
  422. package/prompt/ANALYZE.md +110 -0
  423. package/prompt/CACHE-HINTS.md +49 -0
  424. package/prompt/RECORD.md +114 -0
  425. package/prompt/SYSTEM.md +118 -0
  426. package/skills/agent-browser/SKILL.md +2438 -0
  427. package/skills/create-pqa-scenario/SKILL.md +273 -0
@@ -0,0 +1,300 @@
1
+ #!/usr/bin/env node
2
+ import { Command, InvalidArgumentError } from "commander";
3
+ import { loadEnv } from "../config/env.js";
4
+ import { executeRun, executeScenarioWorker, executeAuthSave, executeAuthList, executeAuthClear, executeClearCache, executeSkillsSync, executeSkillsList, executeSkillsShow, } from "./run.js";
5
+ import { executeAnalyze } from "./analyze.js";
6
+ import { executeRecordStart, executeRecordStop, executeRecordNoteAsync, executeRecordCheckpointAsync, executeRecordGenerate, } from "./record.js";
7
+ import { executeHelp } from "./help.js";
8
+ import { executeConfig } from "./config.js";
9
+ import { executeMcpServe } from "./mcp.js";
10
+ import { collectAllTags, collectAnyTag, mergeTagFilters } from "./tags.js";
11
+ loadEnv();
12
+ function parseParallel(value) {
13
+ if (value === true || value === undefined || value === "") {
14
+ return Number.POSITIVE_INFINITY;
15
+ }
16
+ const n = parseInt(value, 10);
17
+ if (Number.isNaN(n) || n < 1) {
18
+ throw new InvalidArgumentError("--parallel requires a positive integer when a value is provided");
19
+ }
20
+ return n;
21
+ }
22
+ function baseRunOptions(opts) {
23
+ const retriesPolicy = opts.retriesPolicy === "always" || opts.retriesPolicy === "transient"
24
+ ? opts.retriesPolicy
25
+ : undefined;
26
+ return {
27
+ configPath: opts.config,
28
+ tags: mergeTagFilters(opts.tags, opts.tag),
29
+ skillsDirs: opts.skillsDir,
30
+ verbose: opts.verbose,
31
+ retries: opts.retries ? parseInt(opts.retries, 10) : 0,
32
+ artifacts: opts.artifacts ?? "on-failure",
33
+ headed: opts.headed,
34
+ pause: opts.pause,
35
+ parallel: opts.parallel,
36
+ failFast: opts.failFast ?? false,
37
+ authRefresh: opts.authRefresh,
38
+ keepBrowser: opts.keepBrowser,
39
+ noHealing: opts.noHealing,
40
+ noCache: opts.noCache,
41
+ retriesPolicy,
42
+ reportOutputPath: opts.reportOutput,
43
+ reportZip: opts.reportZip,
44
+ };
45
+ }
46
+ const program = new Command();
47
+ program
48
+ .name("pqa")
49
+ .description("ProseQA — agent harness for NL E2E regression testing")
50
+ .version("0.1.0");
51
+ program
52
+ .command("_run-scenario", { hidden: true })
53
+ .description("Internal: run a single scenario in an isolated subprocess")
54
+ .requiredOption("--run-dir <path>", "Run artifact directory")
55
+ .requiredOption("--scenario <path>", "Absolute path to scenario markdown file")
56
+ .option("-c, --config <path>", "Config file path")
57
+ .option("--skills-dir <dirs>", "Extra skill dirs (comma-separated)", (v) => v.split(",").map((d) => d.trim()))
58
+ .option("--retries <n>", "Retries per failed scenario", "0")
59
+ .option("--retries-policy <policy>", "Retry policy when healing is enabled: transient|always", "transient")
60
+ .option("--no-healing", "Disable in-run recovery and transient-only retries")
61
+ .option("--no-cache", "Do not load or write scenario replay hints cache")
62
+ .option("--artifacts <mode>", "Artifact mode: on-failure|always|never", "on-failure")
63
+ .option("--headed", "Run browser in headed mode")
64
+ .option("--keep-browser", "Leave browser open after scenario")
65
+ .option("--auth-refresh", "Re-run auth scenarios and refresh auth store")
66
+ .option("-v, --verbose", "Verbose output")
67
+ .action(async (opts) => {
68
+ const code = await executeScenarioWorker(opts.scenario, opts.runDir, {
69
+ configPath: opts.config,
70
+ skillsDirs: opts.skillsDir,
71
+ verbose: opts.verbose,
72
+ retries: opts.retries ? parseInt(opts.retries, 10) : 0,
73
+ artifacts: opts.artifacts ?? "on-failure",
74
+ headed: opts.headed,
75
+ authRefresh: opts.authRefresh,
76
+ keepBrowser: opts.keepBrowser,
77
+ noHealing: opts.noHealing,
78
+ noCache: opts.noCache,
79
+ retriesPolicy: opts.retriesPolicy === "always" || opts.retriesPolicy === "transient"
80
+ ? opts.retriesPolicy
81
+ : undefined,
82
+ });
83
+ process.exit(code);
84
+ });
85
+ program
86
+ .command("run")
87
+ .description("Run E2E scenarios (CI mode)")
88
+ .argument("[patterns...]", "Scenario glob patterns (default: all markdown under scenariosDir from config)")
89
+ .option("-c, --config <path>", "Config file path")
90
+ .option("--tags <tags>", "Comma-separated scenario tags; repeat for OR groups; use !tag to exclude", collectAllTags)
91
+ .option("--tag <tag>", "Scenario tag; repeat for OR matching; use !tag to match absence", collectAnyTag)
92
+ .option("--skills-dir <dirs>", "Extra skill dirs (comma-separated)", (v) => v.split(",").map((d) => d.trim()))
93
+ .option("--retries <n>", "Retries per failed scenario", "0")
94
+ .option("--retries-policy <policy>", "Retry policy when healing is enabled: transient|always", "transient")
95
+ .option("--no-healing", "Disable in-run recovery and transient-only retries")
96
+ .option("--no-cache", "Do not load or write scenario replay hints cache")
97
+ .option("--artifacts <mode>", "Artifact mode: on-failure|always|never", "on-failure")
98
+ .option("--headed", "Run browser in headed mode")
99
+ .option("--keep-browser", "Leave browser open after each scenario (for local inspection)")
100
+ .option("--auth-refresh", "Re-run auth scenarios and refresh auth store")
101
+ .option("--parallel [n]", "Run scenarios in parallel subprocesses (optional max concurrency; next scenario starts when a slot frees)", parseParallel)
102
+ .option("--fail-fast", "Stop remaining scenarios on first failure (default: run all)")
103
+ .option("--report-output <path>", "Report output path (trailing / creates runId inside; otherwise full path)")
104
+ .option("--report-zip", "Emit report as zip instead of a directory")
105
+ .action(async (patterns, opts) => {
106
+ const code = await executeRun(patterns, baseRunOptions(opts));
107
+ process.exit(code);
108
+ });
109
+ program
110
+ .command("debug")
111
+ .description("Run scenarios with verbose output (local debug)")
112
+ .argument("[patterns...]", "Scenario glob patterns (default: all markdown under scenariosDir from config)")
113
+ .option("-c, --config <path>", "Config file path")
114
+ .option("--tags <tags>", "Comma-separated scenario tags; repeat for OR groups; use !tag to exclude", collectAllTags)
115
+ .option("--tag <tag>", "Scenario tag; repeat for OR matching; use !tag to match absence", collectAnyTag)
116
+ .option("--skills-dir <dirs>", "Extra skill dirs (comma-separated)", (v) => v.split(",").map((d) => d.trim()))
117
+ .option("--pause", "Pause between agent turns")
118
+ .option("--keep-browser", "Leave browser open after each scenario (for local inspection)")
119
+ .option("--auth-refresh", "Re-run auth scenarios and refresh auth store")
120
+ .option("--retries <n>", "Retries", "0")
121
+ .option("--retries-policy <policy>", "Retry policy when healing is enabled: transient|always", "transient")
122
+ .option("--no-healing", "Disable in-run recovery and transient-only retries")
123
+ .option("--no-cache", "Do not load or write scenario replay hints cache")
124
+ .option("--parallel [n]", "Run scenarios in parallel subprocesses (optional max concurrency; next scenario starts when a slot frees)", parseParallel)
125
+ .option("--fail-fast", "Stop remaining scenarios on first failure (default: run all)")
126
+ .option("--no-headed", "Run browser headless")
127
+ .option("--report-output <path>", "Report output path (trailing / creates runId inside; otherwise full path)")
128
+ .option("--report-zip", "Emit report as zip instead of a directory")
129
+ .action(async (patterns, opts) => {
130
+ const code = await executeRun(patterns, {
131
+ ...baseRunOptions({
132
+ ...opts,
133
+ verbose: true,
134
+ headed: opts.headed !== false,
135
+ }),
136
+ pause: opts.pause,
137
+ });
138
+ process.exit(code);
139
+ });
140
+ const skills = program.command("skills").description("Manage skills");
141
+ skills
142
+ .command("list")
143
+ .description("List discovered skills")
144
+ .option("--skills-dir <dirs>", "Skill directories")
145
+ .action((opts) => {
146
+ const dirs = opts.skillsDir
147
+ ? opts.skillsDir.split(",").map((d) => d.trim())
148
+ : ["skills", ".agents/skills"];
149
+ executeSkillsList(dirs);
150
+ });
151
+ skills
152
+ .command("show")
153
+ .description("Show full skill content")
154
+ .argument("<name>", "Skill name")
155
+ .option("--skills-dir <dirs>", "Skill directories")
156
+ .action((name, opts) => {
157
+ const dirs = opts.skillsDir
158
+ ? opts.skillsDir.split(",").map((d) => d.trim())
159
+ : ["skills", ".agents/skills"];
160
+ process.exit(executeSkillsShow(name, dirs));
161
+ });
162
+ skills
163
+ .command("sync")
164
+ .description("Sync agent-browser skill from pinned npm version")
165
+ .action(() => {
166
+ process.exit(executeSkillsSync());
167
+ });
168
+ const auth = program.command("auth").description("Authentication helpers");
169
+ auth
170
+ .command("list")
171
+ .description("List cached auth profiles in the auth store")
172
+ .action(() => {
173
+ process.exit(executeAuthList());
174
+ });
175
+ auth
176
+ .command("clear [profile]")
177
+ .description("Clear cached auth state (all profiles or one profile)")
178
+ .action((profile) => {
179
+ process.exit(executeAuthClear(profile));
180
+ });
181
+ auth
182
+ .command("save <name>")
183
+ .description("Run the configured auth scenario and save state to the auth store")
184
+ .option("-c, --config <path>", "Config file path")
185
+ .option("-v, --verbose", "Verbose")
186
+ .action(async (name, opts) => {
187
+ const code = await executeAuthSave(name, {
188
+ configPath: opts.config,
189
+ verbose: opts.verbose,
190
+ artifacts: "never",
191
+ });
192
+ process.exit(code);
193
+ });
194
+ const record = program.command("record").description("Record browser sessions and generate scenarios");
195
+ record
196
+ .command("start")
197
+ .description("Start recording (headed agent-browser session)")
198
+ .option("-c, --config <path>", "Config file path")
199
+ .option("--url <url>", "URL to open when recording starts")
200
+ .option("--no-headed", "Run headless (not recommended)")
201
+ .option("--session <name>", "agent-browser session name")
202
+ .option("--connect <port>", "Connect to Chrome CDP port instead of launching", (v) => parseInt(v, 10))
203
+ .option("-v, --verbose", "Verbose browser output")
204
+ .action(async (opts) => {
205
+ const code = await executeRecordStart({
206
+ configPath: opts.config,
207
+ url: opts.url,
208
+ headed: opts.headed !== false,
209
+ session: opts.session,
210
+ connect: opts.connect,
211
+ verbose: opts.verbose,
212
+ });
213
+ process.exit(code);
214
+ });
215
+ record
216
+ .command("note <text>")
217
+ .description("Add a free-form comment to the active recording")
218
+ .option("-c, --config <path>", "Config file path")
219
+ .action(async (text, opts) => {
220
+ process.exit(await executeRecordNoteAsync(text, opts.config));
221
+ });
222
+ record
223
+ .command("checkpoint <text>")
224
+ .description("Add a checkpoint hint for the Then section")
225
+ .option("-c, --config <path>", "Config file path")
226
+ .action(async (text, opts) => {
227
+ process.exit(await executeRecordCheckpointAsync(text, opts.config));
228
+ });
229
+ record
230
+ .command("stop")
231
+ .description("Stop recording and generate scenario markdown")
232
+ .option("-c, --config <path>", "Config file path")
233
+ .option("--name <name>", "Scenario name (kebab-case)")
234
+ .option("--out <path>", "Output markdown path")
235
+ .option("--no-generate", "Only save events, skip LLM generation")
236
+ .option("-v, --verbose", "Verbose")
237
+ .action(async (opts) => {
238
+ const code = await executeRecordStop({
239
+ configPath: opts.config,
240
+ name: opts.name,
241
+ out: opts.out,
242
+ skipGenerate: opts.noGenerate,
243
+ verbose: opts.verbose,
244
+ });
245
+ process.exit(code);
246
+ });
247
+ record
248
+ .command("generate <recordingDir>")
249
+ .description("Generate scenario.md from a saved recording directory")
250
+ .option("-c, --config <path>", "Config file path")
251
+ .option("--name <name>", "Scenario name")
252
+ .option("--out <path>", "Output markdown path")
253
+ .action(async (recordingDir, opts) => {
254
+ const code = await executeRecordGenerate(recordingDir, {
255
+ configPath: opts.config,
256
+ name: opts.name,
257
+ out: opts.out,
258
+ });
259
+ process.exit(code);
260
+ });
261
+ program
262
+ .command("config <key> <value>")
263
+ .description("Set a value in pqa.config.json (creates the file if missing)")
264
+ .action(async (key, value) => {
265
+ process.exit(await executeConfig(key, value));
266
+ });
267
+ program
268
+ .command("clear-cache [scenario]")
269
+ .description("Clear scenario replay hints cache (one scenario or all)")
270
+ .option("-c, --config <path>", "Config file path")
271
+ .action(async (scenario, opts) => {
272
+ process.exit(await executeClearCache(scenario, opts.config));
273
+ });
274
+ program
275
+ .command("analyze")
276
+ .description("Analyze run(s) (heuristics + LLM) and review fixes interactively")
277
+ .argument("[runPathOrId...]", "Run directory or id under .pqa/runs/")
278
+ .option("--config <path>", "Path to pqa.config file")
279
+ .option("--last <n>", "Compare the N most recent runs for flaky scenarios", (v) => parseInt(v, 10))
280
+ .action(async (runPathOrIds, opts) => {
281
+ const code = await executeAnalyze(runPathOrIds, {
282
+ configPath: opts.config,
283
+ last: opts.last,
284
+ });
285
+ process.exit(code);
286
+ });
287
+ program
288
+ .command("help [command...]")
289
+ .description("Show help for commands and options")
290
+ .action((command) => {
291
+ process.exit(executeHelp(command));
292
+ });
293
+ program
294
+ .command("mcp")
295
+ .description("Start MCP server (stdio): create-pqa-scenario skill, validate/run inline scenario markdown")
296
+ .action(async () => {
297
+ process.exit(await executeMcpServe());
298
+ });
299
+ program.parse();
300
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Runs until the MCP client closes stdin or the transport disconnects.
3
+ * Do not call process.exit until this promise settles.
4
+ */
5
+ export declare function executeMcpServe(): Promise<number>;
6
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CASvD"}
@@ -0,0 +1,17 @@
1
+ import { startPqaMcpServer } from "../mcp/server.js";
2
+ /**
3
+ * Runs until the MCP client closes stdin or the transport disconnects.
4
+ * Do not call process.exit until this promise settles.
5
+ */
6
+ export async function executeMcpServe() {
7
+ try {
8
+ await startPqaMcpServer(process.cwd());
9
+ return 0;
10
+ }
11
+ catch (err) {
12
+ const message = err instanceof Error ? err.message : String(err);
13
+ console.error(`MCP server error: ${message}`);
14
+ return 1;
15
+ }
16
+ }
17
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface RecordStartOptions {
2
+ configPath?: string;
3
+ url?: string;
4
+ headed?: boolean;
5
+ session?: string;
6
+ connect?: number;
7
+ verbose?: boolean;
8
+ }
9
+ export interface RecordStopOptions {
10
+ configPath?: string;
11
+ name?: string;
12
+ out?: string;
13
+ skipGenerate?: boolean;
14
+ verbose?: boolean;
15
+ }
16
+ export interface RecordGenerateOptions {
17
+ configPath?: string;
18
+ name?: string;
19
+ out?: string;
20
+ verbose?: boolean;
21
+ }
22
+ export declare function executeRecordStart(options: RecordStartOptions): Promise<number>;
23
+ export declare function executeRecordNoteAsync(text: string, configPath?: string): Promise<number>;
24
+ export declare function executeRecordCheckpointAsync(text: string, configPath?: string): Promise<number>;
25
+ export declare function executeRecordStop(options: RecordStopOptions): Promise<number>;
26
+ export declare function executeRecordGenerate(recordingPath: string, options: RecordGenerateOptions): Promise<number>;
27
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/cli/record.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAkHjB;AAYD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CA6EjB;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
@@ -0,0 +1,244 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import chalk from "chalk";
5
+ import ora from "ora";
6
+ import { loadConfig, missingLlmApiKey, resolveBrowserHeaded, resolveSensitiveEnvVars, } from "../config/load.js";
7
+ import { buildBrowserEnv, runBash, closeBrowserSession } from "../agent/bash.js";
8
+ import { appendEvent, ensureRecordingDir, newRecordingId, readMeta, recordingDir, writeMeta, } from "../recorder/events.js";
9
+ import { spawnRecordingBridgeWorker, stopRecordingBridgeWorker, } from "../recorder/bridge-process.js";
10
+ import { writePageRecorderScript } from "../recorder/page-script.js";
11
+ import { clearActiveRecording, readActiveRecording, resolveRecorderConfig, writeActiveRecording, } from "../recorder/session.js";
12
+ import { defaultOutputPath, generateScenarioFromRecording, } from "../recorder/generate-scenario.js";
13
+ function slugify(name) {
14
+ return name
15
+ .toLowerCase()
16
+ .replace(/[^a-z0-9]+/g, "-")
17
+ .replace(/^-|-$/g, "");
18
+ }
19
+ export async function executeRecordStart(options) {
20
+ const cwd = process.cwd();
21
+ const config = await loadConfig(options.configPath, cwd);
22
+ const recorder = resolveRecorderConfig(config.recorder);
23
+ const existing = readActiveRecording(cwd, recorder.outputDir);
24
+ if (existing) {
25
+ console.error(chalk.red(`Recording already active (${existing.id}). Run \`pqa record stop\` first.`));
26
+ return 2;
27
+ }
28
+ const id = newRecordingId();
29
+ const dir = recordingDir(cwd, recorder.outputDir, id);
30
+ ensureRecordingDir(dir);
31
+ const sessionName = options.session ?? `${config.browser.sessionName}-record`;
32
+ let bridge;
33
+ try {
34
+ bridge = await spawnRecordingBridgeWorker({
35
+ projectRoot: cwd,
36
+ recordingDir: dir,
37
+ port: recorder.bridgePort,
38
+ configPath: options.configPath,
39
+ });
40
+ }
41
+ catch (err) {
42
+ console.error(chalk.red(`Failed to start recording bridge: ${err}`));
43
+ return 2;
44
+ }
45
+ const scriptPath = path.join(os.tmpdir(), `pqa-recorder-${id}.js`);
46
+ writePageRecorderScript(bridge.url, scriptPath);
47
+ const headed = resolveBrowserHeaded(config, options.headed !== false);
48
+ const bashEnv = buildBrowserEnv({
49
+ cwd,
50
+ headed,
51
+ sessionName,
52
+ engine: config.browser.engine,
53
+ lightpanda: config.browser.lightpanda,
54
+ artifactDir: dir,
55
+ });
56
+ const timeoutMs = config.agent.bashTimeoutMs;
57
+ await runBash("agent-browser close 2>/dev/null || true", {
58
+ cwd,
59
+ timeoutMs,
60
+ env: bashEnv,
61
+ });
62
+ let openCmd;
63
+ if (options.connect) {
64
+ openCmd = `agent-browser connect ${options.connect}`;
65
+ const connectEntry = await runBash(openCmd, { cwd, timeoutMs, env: bashEnv });
66
+ if (connectEntry.exitCode !== 0) {
67
+ console.error(chalk.red(connectEntry.stderr || connectEntry.stdout));
68
+ stopRecordingBridgeWorker(bridge.pid);
69
+ return 2;
70
+ }
71
+ await runBash(`agent-browser addinitscript "${scriptPath}"`, {
72
+ cwd,
73
+ timeoutMs,
74
+ env: bashEnv,
75
+ });
76
+ if (options.url) {
77
+ await runBash(`agent-browser open "${options.url}"`, {
78
+ cwd,
79
+ timeoutMs,
80
+ env: bashEnv,
81
+ });
82
+ }
83
+ }
84
+ else {
85
+ const url = options.url ?? "about:blank";
86
+ openCmd = `agent-browser --headed open --init-script "${scriptPath}" "${url}"`;
87
+ const openEntry = await runBash(openCmd, { cwd, timeoutMs, env: bashEnv });
88
+ if (openEntry.exitCode !== 0) {
89
+ console.error(chalk.red(openEntry.stderr || openEntry.stdout));
90
+ stopRecordingBridgeWorker(bridge.pid);
91
+ return 2;
92
+ }
93
+ }
94
+ writeMeta(dir, {
95
+ id,
96
+ startedAt: new Date().toISOString(),
97
+ startUrl: options.url,
98
+ sessionName,
99
+ bridgePort: recorder.bridgePort,
100
+ connectPort: options.connect,
101
+ });
102
+ writeActiveRecording(cwd, recorder.outputDir, {
103
+ id,
104
+ dir,
105
+ bridgePort: recorder.bridgePort,
106
+ sessionName,
107
+ bridgeUrl: bridge.url,
108
+ bridgePid: bridge.pid,
109
+ });
110
+ console.log(chalk.green(`Recording started: ${id}`));
111
+ console.log(chalk.dim(` Directory: ${dir}`));
112
+ console.log(chalk.dim(` Bridge: ${bridge.url}`));
113
+ console.log(chalk.dim(" Add notes: pqa record note \"...\" | Checkpoints: pqa record checkpoint \"...\""));
114
+ console.log(chalk.dim(" Stop: pqa record stop [--name my-scenario]"));
115
+ return 0;
116
+ }
117
+ function requireActiveRecording(cwd, outputDir) {
118
+ const active = readActiveRecording(cwd, outputDir);
119
+ if (!active) {
120
+ throw new Error("No active recording. Start one with `pqa record start --url <url>`.");
121
+ }
122
+ return active;
123
+ }
124
+ export async function executeRecordNoteAsync(text, configPath) {
125
+ const cwd = process.cwd();
126
+ const config = await loadConfig(configPath, cwd);
127
+ const recorder = resolveRecorderConfig(config.recorder);
128
+ try {
129
+ const active = requireActiveRecording(cwd, recorder.outputDir);
130
+ appendEvent(active.dir, { type: "comment", text, ts: Date.now() }, resolveSensitiveEnvVars(config));
131
+ console.log(chalk.green("Note recorded."));
132
+ return 0;
133
+ }
134
+ catch (err) {
135
+ console.error(chalk.red(String(err)));
136
+ return 2;
137
+ }
138
+ }
139
+ export async function executeRecordCheckpointAsync(text, configPath) {
140
+ const cwd = process.cwd();
141
+ const config = await loadConfig(configPath, cwd);
142
+ const recorder = resolveRecorderConfig(config.recorder);
143
+ try {
144
+ const active = requireActiveRecording(cwd, recorder.outputDir);
145
+ appendEvent(active.dir, { type: "checkpoint_hint", text, ts: Date.now() }, resolveSensitiveEnvVars(config));
146
+ console.log(chalk.green("Checkpoint hint recorded."));
147
+ return 0;
148
+ }
149
+ catch (err) {
150
+ console.error(chalk.red(String(err)));
151
+ return 2;
152
+ }
153
+ }
154
+ export async function executeRecordStop(options) {
155
+ const cwd = process.cwd();
156
+ const config = await loadConfig(options.configPath, cwd);
157
+ const recorder = resolveRecorderConfig(config.recorder);
158
+ let active;
159
+ try {
160
+ active = requireActiveRecording(cwd, recorder.outputDir);
161
+ }
162
+ catch (err) {
163
+ console.error(chalk.red(String(err)));
164
+ return 2;
165
+ }
166
+ stopRecordingBridgeWorker(active.bridgePid);
167
+ const meta = readMeta(active.dir);
168
+ meta.endedAt = new Date().toISOString();
169
+ writeMeta(active.dir, meta);
170
+ const sessionName = active.sessionName;
171
+ const headed = true;
172
+ await closeBrowserSession({
173
+ cwd,
174
+ timeoutMs: config.agent.bashTimeoutMs,
175
+ sessionName,
176
+ headed,
177
+ engine: config.browser.engine,
178
+ lightpanda: config.browser.lightpanda,
179
+ verbose: options.verbose,
180
+ });
181
+ clearActiveRecording(cwd, recorder.outputDir);
182
+ console.log(chalk.green(`Recording stopped: ${active.id}`));
183
+ if (options.skipGenerate) {
184
+ console.log(chalk.dim(`Events saved in ${active.dir}`));
185
+ return 0;
186
+ }
187
+ const missingKey = missingLlmApiKey(config);
188
+ if (missingKey) {
189
+ console.error(chalk.red(`${missingKey} — cannot generate scenario.`));
190
+ console.log(chalk.dim(`Run later: pqa record generate ${active.dir}`));
191
+ return 2;
192
+ }
193
+ const scenarioName = options.name ?? (slugify(meta.startUrl ?? active.id) || "recorded-scenario");
194
+ const outputPath = options.out ?? defaultOutputPath(cwd, scenarioName);
195
+ mkdirSync(path.dirname(outputPath), { recursive: true });
196
+ const spinner = ora("Generating scenario with LLM…").start();
197
+ try {
198
+ const result = await generateScenarioFromRecording({
199
+ config,
200
+ recordingDir: active.dir,
201
+ cwd,
202
+ scenarioName,
203
+ outputPath,
204
+ });
205
+ spinner.succeed(`Wrote ${result.outputPath}`);
206
+ console.log(chalk.dim(`Validate: pqa debug ${path.relative(cwd, result.outputPath)} --verbose --headed`));
207
+ return 0;
208
+ }
209
+ catch (err) {
210
+ spinner.fail(String(err));
211
+ return 2;
212
+ }
213
+ }
214
+ export async function executeRecordGenerate(recordingPath, options) {
215
+ const cwd = process.cwd();
216
+ const config = await loadConfig(options.configPath, cwd);
217
+ const missingKey = missingLlmApiKey(config);
218
+ if (missingKey) {
219
+ console.error(chalk.red(missingKey));
220
+ return 2;
221
+ }
222
+ const dir = path.resolve(cwd, recordingPath);
223
+ const meta = readMeta(dir);
224
+ const scenarioName = options.name ?? (slugify(meta.startUrl ?? meta.id) || "recorded-scenario");
225
+ const outputPath = options.out ?? defaultOutputPath(cwd, scenarioName);
226
+ mkdirSync(path.dirname(outputPath), { recursive: true });
227
+ const spinner = ora("Generating scenario with LLM…").start();
228
+ try {
229
+ const result = await generateScenarioFromRecording({
230
+ config,
231
+ recordingDir: dir,
232
+ cwd,
233
+ scenarioName,
234
+ outputPath,
235
+ });
236
+ spinner.succeed(`Wrote ${result.outputPath}`);
237
+ return 0;
238
+ }
239
+ catch (err) {
240
+ spinner.fail(String(err));
241
+ return 2;
242
+ }
243
+ }
244
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/cli/record.ts"],"names":[],"mappings":"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"}