@enricai/barnacle 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +958 -0
  3. package/dist/api/errors.d.ts +88 -0
  4. package/dist/api/errors.d.ts.map +1 -0
  5. package/dist/api/errors.js +164 -0
  6. package/dist/api/errors.js.map +1 -0
  7. package/dist/api/helpers/envelope.d.ts +13 -0
  8. package/dist/api/helpers/envelope.d.ts.map +1 -0
  9. package/dist/api/helpers/envelope.js +20 -0
  10. package/dist/api/helpers/envelope.js.map +1 -0
  11. package/dist/api/helpers/reply.d.ts +9 -0
  12. package/dist/api/helpers/reply.d.ts.map +1 -0
  13. package/dist/api/helpers/reply.js +14 -0
  14. package/dist/api/helpers/reply.js.map +1 -0
  15. package/dist/api/plugins/auth.d.ts +27 -0
  16. package/dist/api/plugins/auth.d.ts.map +1 -0
  17. package/dist/api/plugins/auth.js +111 -0
  18. package/dist/api/plugins/auth.js.map +1 -0
  19. package/dist/api/plugins/error-handler.d.ts +12 -0
  20. package/dist/api/plugins/error-handler.d.ts.map +1 -0
  21. package/dist/api/plugins/error-handler.js +72 -0
  22. package/dist/api/plugins/error-handler.js.map +1 -0
  23. package/dist/api/plugins/request-context.d.ts +17 -0
  24. package/dist/api/plugins/request-context.d.ts.map +1 -0
  25. package/dist/api/plugins/request-context.js +61 -0
  26. package/dist/api/plugins/request-context.js.map +1 -0
  27. package/dist/api/routes/health.d.ts +55 -0
  28. package/dist/api/routes/health.d.ts.map +1 -0
  29. package/dist/api/routes/health.js +137 -0
  30. package/dist/api/routes/health.js.map +1 -0
  31. package/dist/api/routes/plugins-introspection.d.ts +17 -0
  32. package/dist/api/routes/plugins-introspection.d.ts.map +1 -0
  33. package/dist/api/routes/plugins-introspection.js +13 -0
  34. package/dist/api/routes/plugins-introspection.js.map +1 -0
  35. package/dist/api/schemas/common.d.ts +114 -0
  36. package/dist/api/schemas/common.d.ts.map +1 -0
  37. package/dist/api/schemas/common.js +109 -0
  38. package/dist/api/schemas/common.js.map +1 -0
  39. package/dist/api/schemas/telemetry.d.ts +66 -0
  40. package/dist/api/schemas/telemetry.d.ts.map +1 -0
  41. package/dist/api/schemas/telemetry.js +52 -0
  42. package/dist/api/schemas/telemetry.js.map +1 -0
  43. package/dist/cache/keyed-ttl-cache.d.ts +45 -0
  44. package/dist/cache/keyed-ttl-cache.d.ts.map +1 -0
  45. package/dist/cache/keyed-ttl-cache.js +69 -0
  46. package/dist/cache/keyed-ttl-cache.js.map +1 -0
  47. package/dist/cache/response-cache.d.ts +37 -0
  48. package/dist/cache/response-cache.d.ts.map +1 -0
  49. package/dist/cache/response-cache.js +114 -0
  50. package/dist/cache/response-cache.js.map +1 -0
  51. package/dist/config.d.ts +258 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +138 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/lib/applicant-payload.d.ts +28 -0
  56. package/dist/lib/applicant-payload.d.ts.map +1 -0
  57. package/dist/lib/applicant-payload.js +20 -0
  58. package/dist/lib/applicant-payload.js.map +1 -0
  59. package/dist/lib/application-address.d.ts +16 -0
  60. package/dist/lib/application-address.d.ts.map +1 -0
  61. package/dist/lib/application-address.js +20 -0
  62. package/dist/lib/application-address.js.map +1 -0
  63. package/dist/lib/application-answers.d.ts +151 -0
  64. package/dist/lib/application-answers.d.ts.map +1 -0
  65. package/dist/lib/application-answers.js +95 -0
  66. package/dist/lib/application-answers.js.map +1 -0
  67. package/dist/lib/application-identity.d.ts +18 -0
  68. package/dist/lib/application-identity.d.ts.map +1 -0
  69. package/dist/lib/application-identity.js +20 -0
  70. package/dist/lib/application-identity.js.map +1 -0
  71. package/dist/lib/application-resume.d.ts +21 -0
  72. package/dist/lib/application-resume.d.ts.map +1 -0
  73. package/dist/lib/application-resume.js +23 -0
  74. package/dist/lib/application-resume.js.map +1 -0
  75. package/dist/lib/bedrock.d.ts +22 -0
  76. package/dist/lib/bedrock.d.ts.map +1 -0
  77. package/dist/lib/bedrock.js +35 -0
  78. package/dist/lib/bedrock.js.map +1 -0
  79. package/dist/lib/case-insensitive-headers.d.ts +15 -0
  80. package/dist/lib/case-insensitive-headers.d.ts.map +1 -0
  81. package/dist/lib/case-insensitive-headers.js +29 -0
  82. package/dist/lib/case-insensitive-headers.js.map +1 -0
  83. package/dist/lib/chromium-client-hints.d.ts +11 -0
  84. package/dist/lib/chromium-client-hints.d.ts.map +1 -0
  85. package/dist/lib/chromium-client-hints.js +17 -0
  86. package/dist/lib/chromium-client-hints.js.map +1 -0
  87. package/dist/lib/cookie-value.d.ts +8 -0
  88. package/dist/lib/cookie-value.d.ts.map +1 -0
  89. package/dist/lib/cookie-value.js +14 -0
  90. package/dist/lib/cookie-value.js.map +1 -0
  91. package/dist/lib/datadog.d.ts +8 -0
  92. package/dist/lib/datadog.d.ts.map +1 -0
  93. package/dist/lib/datadog.js +27 -0
  94. package/dist/lib/datadog.js.map +1 -0
  95. package/dist/lib/dd-metrics.d.ts +28 -0
  96. package/dist/lib/dd-metrics.d.ts.map +1 -0
  97. package/dist/lib/dd-metrics.js +62 -0
  98. package/dist/lib/dd-metrics.js.map +1 -0
  99. package/dist/lib/dispatch-metrics.d.ts +19 -0
  100. package/dist/lib/dispatch-metrics.d.ts.map +1 -0
  101. package/dist/lib/dispatch-metrics.js +65 -0
  102. package/dist/lib/dispatch-metrics.js.map +1 -0
  103. package/dist/lib/env.d.ts +37 -0
  104. package/dist/lib/env.d.ts.map +1 -0
  105. package/dist/lib/env.js +70 -0
  106. package/dist/lib/env.js.map +1 -0
  107. package/dist/lib/errors.d.ts +15 -0
  108. package/dist/lib/errors.d.ts.map +1 -0
  109. package/dist/lib/errors.js +20 -0
  110. package/dist/lib/errors.js.map +1 -0
  111. package/dist/lib/http.d.ts +7 -0
  112. package/dist/lib/http.d.ts.map +1 -0
  113. package/dist/lib/http.js +14 -0
  114. package/dist/lib/http.js.map +1 -0
  115. package/dist/lib/job-tracking.d.ts +17 -0
  116. package/dist/lib/job-tracking.d.ts.map +1 -0
  117. package/dist/lib/job-tracking.js +19 -0
  118. package/dist/lib/job-tracking.js.map +1 -0
  119. package/dist/lib/llm/anthropic-client.d.ts +12 -0
  120. package/dist/lib/llm/anthropic-client.d.ts.map +1 -0
  121. package/dist/lib/llm/anthropic-client.js +23 -0
  122. package/dist/lib/llm/anthropic-client.js.map +1 -0
  123. package/dist/lib/llm/judge.d.ts +57 -0
  124. package/dist/lib/llm/judge.d.ts.map +1 -0
  125. package/dist/lib/llm/judge.js +123 -0
  126. package/dist/lib/llm/judge.js.map +1 -0
  127. package/dist/lib/llm/judges/error-messages.d.ts +38 -0
  128. package/dist/lib/llm/judges/error-messages.d.ts.map +1 -0
  129. package/dist/lib/llm/judges/error-messages.js +72 -0
  130. package/dist/lib/llm/judges/error-messages.js.map +1 -0
  131. package/dist/lib/llm/judges/invalid-fields.d.ts +43 -0
  132. package/dist/lib/llm/judges/invalid-fields.d.ts.map +1 -0
  133. package/dist/lib/llm/judges/invalid-fields.js +80 -0
  134. package/dist/lib/llm/judges/invalid-fields.js.map +1 -0
  135. package/dist/lib/llm/judges/modal-priority.d.ts +41 -0
  136. package/dist/lib/llm/judges/modal-priority.d.ts.map +1 -0
  137. package/dist/lib/llm/judges/modal-priority.js +74 -0
  138. package/dist/lib/llm/judges/modal-priority.js.map +1 -0
  139. package/dist/lib/llm/judges/select-option.d.ts +49 -0
  140. package/dist/lib/llm/judges/select-option.d.ts.map +1 -0
  141. package/dist/lib/llm/judges/select-option.js +90 -0
  142. package/dist/lib/llm/judges/select-option.js.map +1 -0
  143. package/dist/lib/llm/judges/verify-submit.d.ts +68 -0
  144. package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -0
  145. package/dist/lib/llm/judges/verify-submit.js +89 -0
  146. package/dist/lib/llm/judges/verify-submit.js.map +1 -0
  147. package/dist/lib/llm/schemas.d.ts +220 -0
  148. package/dist/lib/llm/schemas.d.ts.map +1 -0
  149. package/dist/lib/llm/schemas.js +239 -0
  150. package/dist/lib/llm/schemas.js.map +1 -0
  151. package/dist/lib/logging.d.ts +39 -0
  152. package/dist/lib/logging.d.ts.map +1 -0
  153. package/dist/lib/logging.js +219 -0
  154. package/dist/lib/logging.js.map +1 -0
  155. package/dist/lib/multipart.d.ts +34 -0
  156. package/dist/lib/multipart.d.ts.map +1 -0
  157. package/dist/lib/multipart.js +55 -0
  158. package/dist/lib/multipart.js.map +1 -0
  159. package/dist/lib/option-matcher.d.ts +15 -0
  160. package/dist/lib/option-matcher.d.ts.map +1 -0
  161. package/dist/lib/option-matcher.js +69 -0
  162. package/dist/lib/option-matcher.js.map +1 -0
  163. package/dist/lib/phone.d.ts +11 -0
  164. package/dist/lib/phone.d.ts.map +1 -0
  165. package/dist/lib/phone.js +17 -0
  166. package/dist/lib/phone.js.map +1 -0
  167. package/dist/lib/random.d.ts +22 -0
  168. package/dist/lib/random.d.ts.map +1 -0
  169. package/dist/lib/random.js +33 -0
  170. package/dist/lib/random.js.map +1 -0
  171. package/dist/lib/statsd.d.ts +11 -0
  172. package/dist/lib/statsd.d.ts.map +1 -0
  173. package/dist/lib/statsd.js +68 -0
  174. package/dist/lib/statsd.js.map +1 -0
  175. package/dist/lib/telemetry/call-capture.d.ts +89 -0
  176. package/dist/lib/telemetry/call-capture.d.ts.map +1 -0
  177. package/dist/lib/telemetry/call-capture.js +190 -0
  178. package/dist/lib/telemetry/call-capture.js.map +1 -0
  179. package/dist/lib/telemetry/call-types.d.ts +65 -0
  180. package/dist/lib/telemetry/call-types.d.ts.map +1 -0
  181. package/dist/lib/telemetry/call-types.js +68 -0
  182. package/dist/lib/telemetry/call-types.js.map +1 -0
  183. package/dist/lib/telemetry/run-state.d.ts +15 -0
  184. package/dist/lib/telemetry/run-state.d.ts.map +1 -0
  185. package/dist/lib/telemetry/run-state.js +23 -0
  186. package/dist/lib/telemetry/run-state.js.map +1 -0
  187. package/dist/lib/telemetry/s3-sink.d.ts +48 -0
  188. package/dist/lib/telemetry/s3-sink.d.ts.map +1 -0
  189. package/dist/lib/telemetry/s3-sink.js +229 -0
  190. package/dist/lib/telemetry/s3-sink.js.map +1 -0
  191. package/dist/lib/telemetry/submission-capture.d.ts +45 -0
  192. package/dist/lib/telemetry/submission-capture.d.ts.map +1 -0
  193. package/dist/lib/telemetry/submission-capture.js +57 -0
  194. package/dist/lib/telemetry/submission-capture.js.map +1 -0
  195. package/dist/lib/telemetry/telemetry-paths.d.ts +59 -0
  196. package/dist/lib/telemetry/telemetry-paths.d.ts.map +1 -0
  197. package/dist/lib/telemetry/telemetry-paths.js +103 -0
  198. package/dist/lib/telemetry/telemetry-paths.js.map +1 -0
  199. package/dist/lib/tracking-click.d.ts +20 -0
  200. package/dist/lib/tracking-click.d.ts.map +1 -0
  201. package/dist/lib/tracking-click.js +75 -0
  202. package/dist/lib/tracking-click.js.map +1 -0
  203. package/dist/lib/url-capture.d.ts +8 -0
  204. package/dist/lib/url-capture.d.ts.map +1 -0
  205. package/dist/lib/url-capture.js +17 -0
  206. package/dist/lib/url-capture.js.map +1 -0
  207. package/dist/lib/us-states.d.ts +20 -0
  208. package/dist/lib/us-states.d.ts.map +1 -0
  209. package/dist/lib/us-states.js +86 -0
  210. package/dist/lib/us-states.js.map +1 -0
  211. package/dist/lib/zod-multipart.d.ts +18 -0
  212. package/dist/lib/zod-multipart.d.ts.map +1 -0
  213. package/dist/lib/zod-multipart.js +35 -0
  214. package/dist/lib/zod-multipart.js.map +1 -0
  215. package/dist/plugins/config-plugin.d.ts +77 -0
  216. package/dist/plugins/config-plugin.d.ts.map +1 -0
  217. package/dist/plugins/config-plugin.js +216 -0
  218. package/dist/plugins/config-plugin.js.map +1 -0
  219. package/dist/plugins/discover.d.ts +72 -0
  220. package/dist/plugins/discover.d.ts.map +1 -0
  221. package/dist/plugins/discover.js +265 -0
  222. package/dist/plugins/discover.js.map +1 -0
  223. package/dist/plugins/json-schema-to-zod.d.ts +47 -0
  224. package/dist/plugins/json-schema-to-zod.d.ts.map +1 -0
  225. package/dist/plugins/json-schema-to-zod.js +85 -0
  226. package/dist/plugins/json-schema-to-zod.js.map +1 -0
  227. package/dist/plugins/loader.d.ts +34 -0
  228. package/dist/plugins/loader.d.ts.map +1 -0
  229. package/dist/plugins/loader.js +348 -0
  230. package/dist/plugins/loader.js.map +1 -0
  231. package/dist/plugins/plugin-api-version.d.ts +8 -0
  232. package/dist/plugins/plugin-api-version.d.ts.map +1 -0
  233. package/dist/plugins/plugin-api-version.js +11 -0
  234. package/dist/plugins/plugin-api-version.js.map +1 -0
  235. package/dist/plugins/plugin-manifest-envelope.d.ts +16 -0
  236. package/dist/plugins/plugin-manifest-envelope.d.ts.map +1 -0
  237. package/dist/plugins/plugin-manifest-envelope.js +19 -0
  238. package/dist/plugins/plugin-manifest-envelope.js.map +1 -0
  239. package/dist/scraper/behavioral-signals.d.ts +16 -0
  240. package/dist/scraper/behavioral-signals.d.ts.map +1 -0
  241. package/dist/scraper/behavioral-signals.js +30 -0
  242. package/dist/scraper/behavioral-signals.js.map +1 -0
  243. package/dist/scraper/errors.d.ts +193 -0
  244. package/dist/scraper/errors.d.ts.map +1 -0
  245. package/dist/scraper/errors.js +226 -0
  246. package/dist/scraper/errors.js.map +1 -0
  247. package/dist/scraper/fixtures.d.ts +23 -0
  248. package/dist/scraper/fixtures.d.ts.map +1 -0
  249. package/dist/scraper/fixtures.js +48 -0
  250. package/dist/scraper/fixtures.js.map +1 -0
  251. package/dist/scraper/flow-runner.d.ts +1319 -0
  252. package/dist/scraper/flow-runner.d.ts.map +1 -0
  253. package/dist/scraper/flow-runner.js +5637 -0
  254. package/dist/scraper/flow-runner.js.map +1 -0
  255. package/dist/scraper/graphql-client.d.ts +30 -0
  256. package/dist/scraper/graphql-client.d.ts.map +1 -0
  257. package/dist/scraper/graphql-client.js +14 -0
  258. package/dist/scraper/graphql-client.js.map +1 -0
  259. package/dist/scraper/http-client.d.ts +75 -0
  260. package/dist/scraper/http-client.d.ts.map +1 -0
  261. package/dist/scraper/http-client.js +189 -0
  262. package/dist/scraper/http-client.js.map +1 -0
  263. package/dist/scraper/http-status-classifier.d.ts +12 -0
  264. package/dist/scraper/http-status-classifier.d.ts.map +1 -0
  265. package/dist/scraper/http-status-classifier.js +29 -0
  266. package/dist/scraper/http-status-classifier.js.map +1 -0
  267. package/dist/scraper/metrics.d.ts +50 -0
  268. package/dist/scraper/metrics.d.ts.map +1 -0
  269. package/dist/scraper/metrics.js +85 -0
  270. package/dist/scraper/metrics.js.map +1 -0
  271. package/dist/scraper/navigate.d.ts +20 -0
  272. package/dist/scraper/navigate.d.ts.map +1 -0
  273. package/dist/scraper/navigate.js +30 -0
  274. package/dist/scraper/navigate.js.map +1 -0
  275. package/dist/scraper/oracle-sentinels.d.ts +22 -0
  276. package/dist/scraper/oracle-sentinels.d.ts.map +1 -0
  277. package/dist/scraper/oracle-sentinels.js +40 -0
  278. package/dist/scraper/oracle-sentinels.js.map +1 -0
  279. package/dist/scraper/parse-json-response.d.ts +16 -0
  280. package/dist/scraper/parse-json-response.d.ts.map +1 -0
  281. package/dist/scraper/parse-json-response.js +37 -0
  282. package/dist/scraper/parse-json-response.js.map +1 -0
  283. package/dist/scraper/pool.d.ts +37 -0
  284. package/dist/scraper/pool.d.ts.map +1 -0
  285. package/dist/scraper/pool.js +105 -0
  286. package/dist/scraper/pool.js.map +1 -0
  287. package/dist/scraper/rate-limited-json-client.d.ts +35 -0
  288. package/dist/scraper/rate-limited-json-client.d.ts.map +1 -0
  289. package/dist/scraper/rate-limited-json-client.js +29 -0
  290. package/dist/scraper/rate-limited-json-client.js.map +1 -0
  291. package/dist/scraper/raw-fetch.d.ts +49 -0
  292. package/dist/scraper/raw-fetch.d.ts.map +1 -0
  293. package/dist/scraper/raw-fetch.js +40 -0
  294. package/dist/scraper/raw-fetch.js.map +1 -0
  295. package/dist/scraper/require-response-field.d.ts +23 -0
  296. package/dist/scraper/require-response-field.d.ts.map +1 -0
  297. package/dist/scraper/require-response-field.js +42 -0
  298. package/dist/scraper/require-response-field.js.map +1 -0
  299. package/dist/scraper/retry.d.ts +33 -0
  300. package/dist/scraper/retry.d.ts.map +1 -0
  301. package/dist/scraper/retry.js +122 -0
  302. package/dist/scraper/retry.js.map +1 -0
  303. package/dist/scraper/session-browserbase.d.ts +35 -0
  304. package/dist/scraper/session-browserbase.d.ts.map +1 -0
  305. package/dist/scraper/session-browserbase.js +198 -0
  306. package/dist/scraper/session-browserbase.js.map +1 -0
  307. package/dist/scraper/session-shared.d.ts +29 -0
  308. package/dist/scraper/session-shared.d.ts.map +1 -0
  309. package/dist/scraper/session-shared.js +35 -0
  310. package/dist/scraper/session-shared.js.map +1 -0
  311. package/dist/scraper/session-steel.d.ts +31 -0
  312. package/dist/scraper/session-steel.d.ts.map +1 -0
  313. package/dist/scraper/session-steel.js +140 -0
  314. package/dist/scraper/session-steel.js.map +1 -0
  315. package/dist/scraper/session-warmup.d.ts +31 -0
  316. package/dist/scraper/session-warmup.d.ts.map +1 -0
  317. package/dist/scraper/session-warmup.js +46 -0
  318. package/dist/scraper/session-warmup.js.map +1 -0
  319. package/dist/scraper/session.d.ts +21 -0
  320. package/dist/scraper/session.d.ts.map +1 -0
  321. package/dist/scraper/session.js +28 -0
  322. package/dist/scraper/session.js.map +1 -0
  323. package/dist/scraper/stagehand-guard.d.ts +128 -0
  324. package/dist/scraper/stagehand-guard.d.ts.map +1 -0
  325. package/dist/scraper/stagehand-guard.js +337 -0
  326. package/dist/scraper/stagehand-guard.js.map +1 -0
  327. package/dist/scraper/throttle.d.ts +21 -0
  328. package/dist/scraper/throttle.d.ts.map +1 -0
  329. package/dist/scraper/throttle.js +45 -0
  330. package/dist/scraper/throttle.js.map +1 -0
  331. package/dist/scripts/hca-inbox-poll.d.ts +19 -0
  332. package/dist/scripts/hca-inbox-poll.d.ts.map +1 -0
  333. package/dist/scripts/hca-inbox-poll.js +151 -0
  334. package/dist/scripts/hca-inbox-poll.js.map +1 -0
  335. package/dist/scripts/judge-llm-batch.d.ts +98 -0
  336. package/dist/scripts/judge-llm-batch.d.ts.map +1 -0
  337. package/dist/scripts/judge-llm-batch.js +350 -0
  338. package/dist/scripts/judge-llm-batch.js.map +1 -0
  339. package/dist/scripts/llm-heal.d.ts +165 -0
  340. package/dist/scripts/llm-heal.d.ts.map +1 -0
  341. package/dist/scripts/llm-heal.js +595 -0
  342. package/dist/scripts/llm-heal.js.map +1 -0
  343. package/dist/scripts/migrate-telemetry-dir-names.d.ts +57 -0
  344. package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +1 -0
  345. package/dist/scripts/migrate-telemetry-dir-names.js +156 -0
  346. package/dist/scripts/migrate-telemetry-dir-names.js.map +1 -0
  347. package/dist/scripts/probe-setinputfiles.d.ts +28 -0
  348. package/dist/scripts/probe-setinputfiles.d.ts.map +1 -0
  349. package/dist/scripts/probe-setinputfiles.js +95 -0
  350. package/dist/scripts/probe-setinputfiles.js.map +1 -0
  351. package/dist/scripts/recon-browser.d.ts +304 -0
  352. package/dist/scripts/recon-browser.d.ts.map +1 -0
  353. package/dist/scripts/recon-browser.js +1833 -0
  354. package/dist/scripts/recon-browser.js.map +1 -0
  355. package/dist/scripts/recon-generate.d.ts +182 -0
  356. package/dist/scripts/recon-generate.d.ts.map +1 -0
  357. package/dist/scripts/recon-generate.js +2572 -0
  358. package/dist/scripts/recon-generate.js.map +1 -0
  359. package/dist/scripts/recon-heal.d.ts +176 -0
  360. package/dist/scripts/recon-heal.d.ts.map +1 -0
  361. package/dist/scripts/recon-heal.js +584 -0
  362. package/dist/scripts/recon-heal.js.map +1 -0
  363. package/dist/scripts/recon-http.d.ts +19 -0
  364. package/dist/scripts/recon-http.d.ts.map +1 -0
  365. package/dist/scripts/recon-http.js +377 -0
  366. package/dist/scripts/recon-http.js.map +1 -0
  367. package/dist/scripts/recon-replay-jobs.d.ts +21 -0
  368. package/dist/scripts/recon-replay-jobs.d.ts.map +1 -0
  369. package/dist/scripts/recon-replay-jobs.js +221 -0
  370. package/dist/scripts/recon-replay-jobs.js.map +1 -0
  371. package/dist/scripts/recon-shared.d.ts +52 -0
  372. package/dist/scripts/recon-shared.d.ts.map +1 -0
  373. package/dist/scripts/recon-shared.js +68 -0
  374. package/dist/scripts/recon-shared.js.map +1 -0
  375. package/dist/scripts/recon-summarize.d.ts +15 -0
  376. package/dist/scripts/recon-summarize.d.ts.map +1 -0
  377. package/dist/scripts/recon-summarize.js +233 -0
  378. package/dist/scripts/recon-summarize.js.map +1 -0
  379. package/dist/scripts/smoke-test.d.ts +22 -0
  380. package/dist/scripts/smoke-test.d.ts.map +1 -0
  381. package/dist/scripts/smoke-test.js +236 -0
  382. package/dist/scripts/smoke-test.js.map +1 -0
  383. package/dist/server.d.ts +10 -0
  384. package/dist/server.d.ts.map +1 -0
  385. package/dist/server.js +189 -0
  386. package/dist/server.js.map +1 -0
  387. package/dist/site-plugin.d.ts +226 -0
  388. package/dist/site-plugin.d.ts.map +1 -0
  389. package/dist/site-plugin.js +13 -0
  390. package/dist/site-plugin.js.map +1 -0
  391. package/dist/testing/answers-fixture.d.ts +13 -0
  392. package/dist/testing/answers-fixture.d.ts.map +1 -0
  393. package/dist/testing/answers-fixture.js +37 -0
  394. package/dist/testing/answers-fixture.js.map +1 -0
  395. package/dist/testing/batch-email-confirmation.d.ts +58 -0
  396. package/dist/testing/batch-email-confirmation.d.ts.map +1 -0
  397. package/dist/testing/batch-email-confirmation.js +62 -0
  398. package/dist/testing/batch-email-confirmation.js.map +1 -0
  399. package/dist/testing/batch-report.d.ts +33 -0
  400. package/dist/testing/batch-report.d.ts.map +1 -0
  401. package/dist/testing/batch-report.js +30 -0
  402. package/dist/testing/batch-report.js.map +1 -0
  403. package/dist/testing/contract-parity-suite.d.ts +55 -0
  404. package/dist/testing/contract-parity-suite.d.ts.map +1 -0
  405. package/dist/testing/contract-parity-suite.js +39 -0
  406. package/dist/testing/contract-parity-suite.js.map +1 -0
  407. package/dist/testing/coverage-guard-suite.d.ts +46 -0
  408. package/dist/testing/coverage-guard-suite.d.ts.map +1 -0
  409. package/dist/testing/coverage-guard-suite.js +39 -0
  410. package/dist/testing/coverage-guard-suite.js.map +1 -0
  411. package/dist/testing/fixtures/resume.pdf +54 -0
  412. package/dist/testing/integration-runner.d.ts +62 -0
  413. package/dist/testing/integration-runner.d.ts.map +1 -0
  414. package/dist/testing/integration-runner.js +46 -0
  415. package/dist/testing/integration-runner.js.map +1 -0
  416. package/dist/testing/mock-fetch-response.d.ts +7 -0
  417. package/dist/testing/mock-fetch-response.d.ts.map +1 -0
  418. package/dist/testing/mock-fetch-response.js +16 -0
  419. package/dist/testing/mock-fetch-response.js.map +1 -0
  420. package/dist/testing/persona-fixture.d.ts +77 -0
  421. package/dist/testing/persona-fixture.d.ts.map +1 -0
  422. package/dist/testing/persona-fixture.js +83 -0
  423. package/dist/testing/persona-fixture.js.map +1 -0
  424. package/dist/testing/replay-integration-suite.d.ts +50 -0
  425. package/dist/testing/replay-integration-suite.d.ts.map +1 -0
  426. package/dist/testing/replay-integration-suite.js +45 -0
  427. package/dist/testing/replay-integration-suite.js.map +1 -0
  428. package/dist/testing/resume-fixture.d.ts +39 -0
  429. package/dist/testing/resume-fixture.d.ts.map +1 -0
  430. package/dist/testing/resume-fixture.js +38 -0
  431. package/dist/testing/resume-fixture.js.map +1 -0
  432. package/dist/testmail/client.d.ts +61 -0
  433. package/dist/testmail/client.d.ts.map +1 -0
  434. package/dist/testmail/client.js +190 -0
  435. package/dist/testmail/client.js.map +1 -0
  436. package/dist/testmail/errors.d.ts +18 -0
  437. package/dist/testmail/errors.d.ts.map +1 -0
  438. package/dist/testmail/errors.js +29 -0
  439. package/dist/testmail/errors.js.map +1 -0
  440. package/dist/types/dispatch-metrics.d.ts +46 -0
  441. package/dist/types/dispatch-metrics.d.ts.map +1 -0
  442. package/dist/types/dispatch-metrics.js +25 -0
  443. package/dist/types/dispatch-metrics.js.map +1 -0
  444. package/dist/types/logging.d.ts +11 -0
  445. package/dist/types/logging.d.ts.map +1 -0
  446. package/dist/types/logging.js +3 -0
  447. package/dist/types/logging.js.map +1 -0
  448. package/package.json +283 -0
@@ -0,0 +1,584 @@
1
+ "use strict";
2
+ /**
3
+ * Recon self-heal harness: given a site whose recon flow produced terminal
4
+ * step failures, iterate — baseline-replay the flow, ask the
5
+ * recon-flow-patch-generator to propose a minimal patch to one step,
6
+ * replay the patched flow, score, check convergence. Writes a
7
+ * healing-<siteId>.md report so the human can review and manually apply
8
+ * the best patch. The source recon-flow.json is NEVER modified.
9
+ *
10
+ * Usage:
11
+ * pnpm tsx src/scripts/recon-heal.ts \
12
+ * --site-id my-site \
13
+ * --url https://my-site.example.com
14
+ *
15
+ * Knobs (all optional):
16
+ * --max-iterations <N> default 5
17
+ * --n-replays <N> default 3 (Steel sessions are expensive)
18
+ * --success-threshold <0..1> default 0.9
19
+ * --plateau-delta <0..1> default 0.03
20
+ * --plateau-window <N> default 3
21
+ * --out-dir <path> default heal-out
22
+ * --dry-run stubs the browser runner (CI mode)
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.buildAnthropicClient = void 0;
26
+ exports.requestPatch = requestPatch;
27
+ exports.applyPatch = applyPatch;
28
+ exports.checkConvergence = checkConvergence;
29
+ exports.makeDryRunStepRunner = makeDryRunStepRunner;
30
+ exports.makeRealStepRunner = makeRealStepRunner;
31
+ exports.writeState = writeState;
32
+ exports.writeIterationArtifacts = writeIterationArtifacts;
33
+ exports.writeHealReport = writeHealReport;
34
+ exports.phaseHeal = phaseHeal;
35
+ const node_crypto_1 = require("node:crypto");
36
+ const node_fs_1 = require("node:fs");
37
+ const node_path_1 = require("node:path");
38
+ const zod_1 = require("@anthropic-ai/sdk/helpers/zod");
39
+ const date_fns_1 = require("date-fns");
40
+ const config_1 = require("../config");
41
+ const http_1 = require("../lib/http");
42
+ const anthropic_client_1 = require("../lib/llm/anthropic-client");
43
+ Object.defineProperty(exports, "buildAnthropicClient", { enumerable: true, get: function () { return anthropic_client_1.buildAnthropicClient; } });
44
+ const schemas_1 = require("../lib/llm/schemas");
45
+ const logging_1 = require("../lib/logging");
46
+ const call_capture_1 = require("../lib/telemetry/call-capture");
47
+ const call_types_1 = require("../lib/telemetry/call-types");
48
+ const errors_1 = require("../scraper/errors");
49
+ const session_1 = require("../scraper/session");
50
+ const stagehand_guard_1 = require("../scraper/stagehand-guard");
51
+ (0, http_1.configureHttpDispatcher)();
52
+ const logger = (0, logging_1.getScriptLogger)("recon-heal");
53
+ // ── defaults ──────────────────────────────────────────────────────────────────
54
+ const DEFAULT_MAX_ITERATIONS = 5;
55
+ const DEFAULT_N_REPLAYS = 3;
56
+ const DEFAULT_SUCCESS_THRESHOLD = 0.9;
57
+ const DEFAULT_PLATEAU_DELTA = 0.03;
58
+ const DEFAULT_PLATEAU_WINDOW = 3;
59
+ const DEFAULT_OUT_DIR = "heal-out";
60
+ /** Warn before starting when estimated Steel+Anthropic calls exceed this. */
61
+ const COST_WARNING_THRESHOLD = 30;
62
+ function anthropicModelName() {
63
+ const raw = config_1.config.scraper.model;
64
+ return raw.startsWith("anthropic/") ? raw.slice("anthropic/".length) : raw;
65
+ }
66
+ // ── patch generator ───────────────────────────────────────────────────────────
67
+ /**
68
+ * System prompt carrying the minimal-change patch discipline. Per Anthropic
69
+ * guidance, durable rules live in `system` so the user prompt can focus on
70
+ * per-call data (current flow, failing steps, prior attempts).
71
+ */
72
+ const PATCH_SYSTEM_PROMPT = `You propose minimal patches to a recon-flow JSON. Apply the minimise-change principle:
73
+ - The anchor must be a verbatim substring of one of the step strings in the current flow; copy-paste it exactly.
74
+ - The replacement is the new text to substitute in place of the anchor.
75
+ - Prefer clarifying ambiguous phrasing over rewriting a clear instruction.
76
+ - Add visible landmarks (labels, headings) to reduce selector ambiguity.
77
+ - Do not anchor on text that appears in multiple steps.
78
+ - Do not repeat a strategy already in PRIOR ITERATION HISTORY.
79
+ - If PRIOR ITERATION HISTORY shows no_change or regressed, pivot to a fundamentally different approach and explain in pivot_reason.`;
80
+ /**
81
+ * Asks the model to propose a minimal patch to one failing step, following
82
+ * the recon-flow-patch-generator subagent discipline: anchor is a verbatim
83
+ * substring, replacement is the new step text.
84
+ */
85
+ async function requestPatch(params) {
86
+ const { client, currentFlow, failingSteps, iterN, priorAttempts, captureFn = call_capture_1.captureLlmCall, } = params;
87
+ const flowJson = JSON.stringify(currentFlow, null, 2);
88
+ const failingList = failingSteps.map((s, i) => ` ${i + 1}. "${s}"`).join("\n");
89
+ const historySection = priorAttempts.length > 0
90
+ ? priorAttempts
91
+ .map((a) => ` iter ${a.iter}: anchor="${a.anchor}" replacement="${a.replacement}" strategy="${a.strategy}" outcome=${a.outcome}`)
92
+ .join("\n")
93
+ : " (no prior attempts)";
94
+ const prompt = `This is iteration ${iterN}.
95
+
96
+ ## CURRENT FLOW JSON
97
+ ${flowJson}
98
+
99
+ ## FAILING STEPS (steps that terminally failed browser automation)
100
+ ${failingList}
101
+
102
+ ## PRIOR ITERATION HISTORY
103
+ ${historySection}
104
+
105
+ Propose a patch to exactly ONE failing step. Set pivot_reason to null on the first iteration; otherwise set it to one sentence explaining the pivot from the last failed attempt.`;
106
+ const model = anthropicModelName();
107
+ const t0 = performance.now();
108
+ try {
109
+ const response = await client.messages.parse({
110
+ model,
111
+ max_tokens: 500,
112
+ system: PATCH_SYSTEM_PROMPT,
113
+ messages: [{ role: "user", content: prompt }],
114
+ output_config: {
115
+ format: (0, zod_1.zodOutputFormat)(schemas_1.PATCH_RESPONSE_SCHEMA),
116
+ },
117
+ });
118
+ const latencyMs = performance.now() - t0;
119
+ const parsed = response.parsed_output;
120
+ if (parsed === null) {
121
+ throw new Error("structured-output enabled but parsed_output is null");
122
+ }
123
+ const textBlock = response.content.find((b) => b.type === "text");
124
+ const rawText = textBlock?.type === "text" ? textBlock.text : "";
125
+ const patch = {
126
+ anchor: parsed.anchor,
127
+ replacement: parsed.replacement,
128
+ strategy: parsed.strategy,
129
+ pivot_reason: parsed.pivot_reason,
130
+ };
131
+ const anchorFound = currentFlow.some((step) => step.includes(patch.anchor));
132
+ if (!anchorFound) {
133
+ logger.warn(`patch anchor not found in current flow: "${patch.anchor}"`);
134
+ await captureFn({
135
+ callId: (0, node_crypto_1.randomUUID)(),
136
+ callType: call_types_1.CALL_TYPE_RECON_FLOW_PATCH,
137
+ model,
138
+ systemPrompt: PATCH_SYSTEM_PROMPT,
139
+ userContent: prompt,
140
+ responseContent: rawText,
141
+ parsedOk: false,
142
+ inputTokens: response.usage?.input_tokens ?? null,
143
+ outputTokens: response.usage?.output_tokens ?? null,
144
+ latencyMs,
145
+ success: false,
146
+ errorMessage: `patch anchor not found in current flow: ${patch.anchor.slice(0, 80)}`,
147
+ failureKind: "schema-validation-failed",
148
+ });
149
+ return null;
150
+ }
151
+ await captureFn({
152
+ callId: (0, node_crypto_1.randomUUID)(),
153
+ callType: call_types_1.CALL_TYPE_RECON_FLOW_PATCH,
154
+ model,
155
+ systemPrompt: PATCH_SYSTEM_PROMPT,
156
+ userContent: prompt,
157
+ responseContent: rawText,
158
+ parsedOk: true,
159
+ inputTokens: response.usage?.input_tokens ?? null,
160
+ outputTokens: response.usage?.output_tokens ?? null,
161
+ latencyMs,
162
+ success: true,
163
+ errorMessage: null,
164
+ failureKind: null,
165
+ });
166
+ return patch;
167
+ }
168
+ catch (err) {
169
+ await captureFn({
170
+ callId: (0, node_crypto_1.randomUUID)(),
171
+ callType: call_types_1.CALL_TYPE_RECON_FLOW_PATCH,
172
+ model,
173
+ systemPrompt: PATCH_SYSTEM_PROMPT,
174
+ userContent: prompt,
175
+ responseContent: null,
176
+ parsedOk: false,
177
+ inputTokens: null,
178
+ outputTokens: null,
179
+ latencyMs: performance.now() - t0,
180
+ success: false,
181
+ errorMessage: err instanceof Error ? err.message : String(err),
182
+ failureKind: (0, call_capture_1.classifyLlmCallFailure)(err),
183
+ });
184
+ return null;
185
+ }
186
+ }
187
+ // ── patch application ─────────────────────────────────────────────────────────
188
+ /**
189
+ * Produces a patched flow without touching the source — callers depend on the
190
+ * original remaining unmodified so it can be safely re-used across iterations.
191
+ */
192
+ function applyPatch(flow, patch) {
193
+ const patched = flow.map((step) => {
194
+ if (step.includes(patch.anchor)) {
195
+ return step.replace(patch.anchor, patch.replacement);
196
+ }
197
+ return step;
198
+ });
199
+ return patched;
200
+ }
201
+ // ── convergence ───────────────────────────────────────────────────────────────
202
+ /**
203
+ * Determines the convergence verdict given the current history and thresholds.
204
+ * Checks in order: SUCCESS → REGRESSED → BUDGET_EXHAUSTED → PLATEAUED → CONTINUE.
205
+ */
206
+ function checkConvergence(params) {
207
+ const { history, bestPassRate, maxIterations, successThreshold, plateauDelta, plateauWindow } = params;
208
+ if (history.length === 0)
209
+ return "CONTINUE";
210
+ const latest = history[history.length - 1];
211
+ if (latest.passRate >= successThreshold)
212
+ return "SUCCESS";
213
+ if (history.length >= maxIterations)
214
+ return "BUDGET_EXHAUSTED";
215
+ if (history.length >= plateauWindow) {
216
+ const window = history.slice(-plateauWindow);
217
+ const allRegressed = window.every((h) => bestPassRate - h.passRate > plateauDelta);
218
+ if (allRegressed)
219
+ return "REGRESSED";
220
+ }
221
+ if (history.length >= plateauWindow) {
222
+ const window = history.slice(-plateauWindow);
223
+ const rates = window.map((h) => h.passRate);
224
+ const min = Math.min(...rates);
225
+ const max = Math.max(...rates);
226
+ if (max - min < plateauDelta)
227
+ return "PLATEAUED";
228
+ }
229
+ return "CONTINUE";
230
+ }
231
+ // ── step runner ───────────────────────────────────────────────────────────────
232
+ /**
233
+ * Dry-run step runner: all steps pass immediately. Used in CI to avoid real
234
+ * Steel sessions. Accepts a dry-run pass rate override for testing convergence.
235
+ */
236
+ function makeDryRunStepRunner(passRate = 1.0) {
237
+ return async ({ flow, }) => {
238
+ const total = flow.length;
239
+ const passCount = Math.round(total * passRate);
240
+ const failCount = total - passCount;
241
+ return { passRate: total > 0 ? passCount / total : 0, passCount, failCount };
242
+ };
243
+ }
244
+ /**
245
+ * Real step runner: drives recon-browser.ts against a live Steel session.
246
+ * Each step that throws StepVerificationError counts as a failure.
247
+ */
248
+ function makeRealStepRunner() {
249
+ return async ({ flow, url, }) => {
250
+ let passCount = 0;
251
+ let failCount = 0;
252
+ const session = await (0, session_1.createBrowserSession)();
253
+ try {
254
+ const page = await session.stagehand.context.awaitActivePage();
255
+ await page.goto(url, { waitUntil: "domcontentloaded" });
256
+ for (const step of flow) {
257
+ try {
258
+ const result = await (0, stagehand_guard_1.guardedAct)(session.stagehand, step);
259
+ if (!result.success) {
260
+ failCount++;
261
+ }
262
+ else {
263
+ passCount++;
264
+ }
265
+ }
266
+ catch (err) {
267
+ if (err instanceof errors_1.StepVerificationError) {
268
+ failCount++;
269
+ }
270
+ else {
271
+ failCount++;
272
+ }
273
+ }
274
+ }
275
+ }
276
+ finally {
277
+ await session.close().catch(() => undefined);
278
+ }
279
+ const total = flow.length;
280
+ return {
281
+ passRate: total > 0 ? passCount / total : 0,
282
+ passCount,
283
+ failCount,
284
+ };
285
+ };
286
+ }
287
+ // ── state persistence ─────────────────────────────────────────────────────────
288
+ /**
289
+ * Writes the current heal state to heal-out/<siteId>/state.json so the
290
+ * operator can inspect progress and the loop can resume across interruptions.
291
+ */
292
+ function writeState(outDir, siteId, state) {
293
+ const dir = (0, node_path_1.join)(outDir, siteId);
294
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
295
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "state.json"), JSON.stringify(state, null, 2));
296
+ }
297
+ /**
298
+ * Persists all per-iteration inputs and outputs so the operator can audit
299
+ * exactly what the patch-generator saw and how the patched arm performed.
300
+ */
301
+ function writeIterationArtifacts(params) {
302
+ const { outDir, siteId, iterN, patchRequest, patch, appliedFlow, passRate, passCount, failCount, } = params;
303
+ const dir = (0, node_path_1.join)(outDir, siteId, `iter-${iterN}`);
304
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
305
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "patch-request.json"), JSON.stringify(patchRequest, null, 2));
306
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "patch-response.json"), JSON.stringify(patch, null, 2));
307
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "applied-flow.json"), JSON.stringify(appliedFlow, null, 2));
308
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "arm-results.json"), JSON.stringify({ iterN, passCount, failCount }, null, 2));
309
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, "scores.json"), JSON.stringify({ iterN, passRate, passCount, failCount }, null, 2));
310
+ }
311
+ // ── report ────────────────────────────────────────────────────────────────────
312
+ /**
313
+ * Writes the healing report markdown and returns its path.
314
+ */
315
+ function writeHealReport(params) {
316
+ const { outDir, siteId, state, verdict } = params;
317
+ const dir = (0, node_path_1.join)(outDir, siteId);
318
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
319
+ const historyRows = [
320
+ `| iter | pass_rate | delta |`,
321
+ `|------|-----------|-------|`,
322
+ `| 0 (baseline) | ${(state.baselinePassRate * 100).toFixed(0)}% | — |`,
323
+ ...state.history.map((h, idx) => {
324
+ const prev = idx === 0 ? state.baselinePassRate : state.history[idx - 1].passRate;
325
+ const delta = h.passRate - prev;
326
+ const deltaStr = `${(delta >= 0 ? "+" : "") + (delta * 100).toFixed(0)}%`;
327
+ return `| ${h.iterN} | ${(h.passRate * 100).toFixed(0)}% | ${deltaStr} |`;
328
+ }),
329
+ ].join("\n");
330
+ const bestPatchBlock = state.bestPatch !== null
331
+ ? [
332
+ `**Anchor:**`,
333
+ `\`\`\``,
334
+ state.bestPatch.anchor,
335
+ `\`\`\``,
336
+ ``,
337
+ `**Replacement:**`,
338
+ `\`\`\``,
339
+ state.bestPatch.replacement,
340
+ `\`\`\``,
341
+ ``,
342
+ `**Strategy:** ${state.bestPatch.strategy}`,
343
+ ].join("\n")
344
+ : "(no patch improved the baseline)";
345
+ const report = [
346
+ `# Heal report: ${siteId}`,
347
+ ``,
348
+ `**Verdict:** ${verdict}`,
349
+ `**Iterations run:** ${state.history.length}`,
350
+ `**Baseline pass rate:** ${(state.baselinePassRate * 100).toFixed(0)}%`,
351
+ `**Best pass rate:** ${(state.bestPassRate * 100).toFixed(0)}% (iter ${state.bestIterN})`,
352
+ ``,
353
+ `## Best patch`,
354
+ ``,
355
+ bestPatchBlock,
356
+ ``,
357
+ `## Iteration history`,
358
+ ``,
359
+ historyRows,
360
+ ``,
361
+ `---`,
362
+ `_Generated by recon-heal at ${(0, date_fns_1.formatISO)(new Date())}_`,
363
+ `_Production recon-flow.json was NOT modified. Apply the patch above manually after review._`,
364
+ ].join("\n");
365
+ const reportPath = (0, node_path_1.join)(dir, `healing-${siteId}.md`);
366
+ (0, node_fs_1.writeFileSync)(reportPath, report);
367
+ return reportPath;
368
+ }
369
+ /**
370
+ * Drives the full baseline → patch → replay → converge loop for a single site.
371
+ * Accepts injectable `stepRunner` and `requestPatchFn` so tests can stub the
372
+ * expensive browser and LLM operations.
373
+ */
374
+ async function phaseHeal(params) {
375
+ const { siteId, url, maxIterations = DEFAULT_MAX_ITERATIONS, nReplays = DEFAULT_N_REPLAYS, successThreshold = DEFAULT_SUCCESS_THRESHOLD, plateauDelta = DEFAULT_PLATEAU_DELTA, plateauWindow = DEFAULT_PLATEAU_WINDOW, outDir = DEFAULT_OUT_DIR, dryRun = false, } = params;
376
+ const stepRunner = params.stepRunner ?? (dryRun ? makeDryRunStepRunner() : makeRealStepRunner());
377
+ const requestPatchFn = params.requestPatchFn ?? requestPatch;
378
+ // ── pre-flight ──────────────────────────────────────────────────────────────
379
+ const flowFilePath = (0, node_path_1.resolve)((0, node_path_1.join)("src", "sites", siteId, "recon-flow.json"));
380
+ // recon-heal operates on the instruction strings; per the file-level comment
381
+ // it never writes back to the source flow, so the projection to strings is
382
+ // lossless from recon-heal's perspective even if the source uses the N+23
383
+ // optional-object shape. The shape is validated upstream by recon-browser.
384
+ const rawFlow = JSON.parse((0, node_fs_1.readFileSync)(flowFilePath, "utf-8"));
385
+ const originalFlow = Array.isArray(rawFlow)
386
+ ? rawFlow.map((s) => (typeof s === "string" ? s : s.step))
387
+ : [];
388
+ logger.info(`recon-heal: site=${siteId} flow_steps=${originalFlow.length} url=${url}`);
389
+ const estimatedCalls = (1 + maxIterations) * nReplays * 2;
390
+ if (estimatedCalls > COST_WARNING_THRESHOLD) {
391
+ logger.warn(`recon-heal: estimated ${estimatedCalls} calls (threshold=${COST_WARNING_THRESHOLD}). ` +
392
+ `Reduce --max-iterations or --n-replays to lower cost.`);
393
+ }
394
+ const anthropic = dryRun ? null : (0, anthropic_client_1.buildAnthropicClient)();
395
+ if (!dryRun && !anthropic) {
396
+ throw new Error("recon-heal requires ANTHROPIC_API_KEY — Bedrock-only deployments are not supported");
397
+ }
398
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(outDir, siteId), { recursive: true });
399
+ // ── baseline ────────────────────────────────────────────────────────────────
400
+ logger.info(`recon-heal: baseline (n_replays=${nReplays})`);
401
+ let baselinePassSum = 0;
402
+ for (let r = 0; r < nReplays; r++) {
403
+ const runId = `heal-baseline-${siteId}-r${r}`;
404
+ const result = await stepRunner({ flow: originalFlow, url, runId });
405
+ baselinePassSum += result.passRate;
406
+ logger.info(`recon-heal: baseline r${r} pass_rate=${(result.passRate * 100).toFixed(0)}%`);
407
+ }
408
+ const baselinePassRate = nReplays > 0 ? baselinePassSum / nReplays : 0;
409
+ logger.info(`recon-heal: baseline avg pass_rate=${(baselinePassRate * 100).toFixed(0)}%`);
410
+ const state = {
411
+ siteId,
412
+ originalFlow,
413
+ baselinePassRate,
414
+ history: [],
415
+ bestPassRate: baselinePassRate,
416
+ bestPatch: null,
417
+ bestIterN: 0,
418
+ };
419
+ writeState(outDir, siteId, state);
420
+ if (baselinePassRate >= successThreshold) {
421
+ logger.info("recon-heal: baseline already meets threshold — exiting SUCCESS");
422
+ const reportPath = writeHealReport({ outDir, siteId, state, verdict: "SUCCESS" });
423
+ return { verdict: "SUCCESS", reportPath, state };
424
+ }
425
+ // ── iteration loop ──────────────────────────────────────────────────────────
426
+ let currentFlow = [...originalFlow];
427
+ let failingSteps = [...originalFlow];
428
+ const priorAttempts = [];
429
+ let convergeResult = "CONTINUE";
430
+ while (convergeResult === "CONTINUE") {
431
+ const iterN = state.history.length + 1;
432
+ logger.info(`recon-heal: iteration ${iterN}/${maxIterations}`);
433
+ const patchRequest = {
434
+ currentFlow,
435
+ failingSteps,
436
+ iterN,
437
+ priorAttempts: [...priorAttempts],
438
+ };
439
+ let patch = null;
440
+ if (anthropic) {
441
+ patch = await requestPatchFn({
442
+ client: anthropic,
443
+ currentFlow,
444
+ failingSteps,
445
+ iterN,
446
+ priorAttempts,
447
+ });
448
+ }
449
+ if (!patch) {
450
+ logger.warn(`recon-heal: iter ${iterN} — patch-generator returned null, stopping`);
451
+ convergeResult = "BUDGET_EXHAUSTED";
452
+ break;
453
+ }
454
+ const appliedFlow = applyPatch(currentFlow, patch);
455
+ let patchedPassSum = 0;
456
+ let totalPassCount = 0;
457
+ let totalFailCount = 0;
458
+ for (let r = 0; r < nReplays; r++) {
459
+ const runId = `heal-iter${iterN}-${siteId}-r${r}`;
460
+ const result = await stepRunner({ flow: appliedFlow, url, runId });
461
+ patchedPassSum += result.passRate;
462
+ totalPassCount += result.passCount;
463
+ totalFailCount += result.failCount;
464
+ logger.info(`recon-heal: iter ${iterN} r${r} pass_rate=${(result.passRate * 100).toFixed(0)}%`);
465
+ }
466
+ const passRate = nReplays > 0 ? patchedPassSum / nReplays : 0;
467
+ const prevBest = state.bestPassRate;
468
+ const record = { iterN, passRate, patch };
469
+ state.history.push(record);
470
+ if (passRate > state.bestPassRate) {
471
+ state.bestPassRate = passRate;
472
+ state.bestPatch = patch;
473
+ state.bestIterN = iterN;
474
+ currentFlow = appliedFlow;
475
+ failingSteps = appliedFlow;
476
+ }
477
+ const outcome = passRate > prevBest + plateauDelta
478
+ ? "improved"
479
+ : passRate < prevBest - plateauDelta
480
+ ? "regressed"
481
+ : "no_change";
482
+ priorAttempts.push({
483
+ iter: iterN,
484
+ anchor: patch.anchor,
485
+ replacement: patch.replacement,
486
+ strategy: patch.strategy,
487
+ outcome,
488
+ });
489
+ writeIterationArtifacts({
490
+ outDir,
491
+ siteId,
492
+ iterN,
493
+ patchRequest,
494
+ patch,
495
+ appliedFlow,
496
+ passRate,
497
+ passCount: totalPassCount,
498
+ failCount: totalFailCount,
499
+ });
500
+ writeState(outDir, siteId, state);
501
+ logger.info(`recon-heal: iter ${iterN} pass_rate=${(passRate * 100).toFixed(0)}% ` +
502
+ `best=${(state.bestPassRate * 100).toFixed(0)}% outcome=${outcome}`);
503
+ convergeResult = checkConvergence({
504
+ history: state.history,
505
+ bestPassRate: state.bestPassRate,
506
+ maxIterations,
507
+ successThreshold,
508
+ plateauDelta,
509
+ plateauWindow,
510
+ });
511
+ }
512
+ const finalVerdict = convergeResult;
513
+ const reportPath = writeHealReport({ outDir, siteId, state, verdict: finalVerdict });
514
+ logger.info(`recon-heal: verdict=${finalVerdict} report=${reportPath}`);
515
+ return { verdict: finalVerdict, reportPath, state };
516
+ }
517
+ // ── CLI ───────────────────────────────────────────────────────────────────────
518
+ /**
519
+ * Parses CLI args and exits with a usage message when required args are absent.
520
+ */
521
+ function parseCli() {
522
+ const args = process.argv.slice(2);
523
+ let siteId = "";
524
+ let url = "";
525
+ let maxIterations = DEFAULT_MAX_ITERATIONS;
526
+ let nReplays = DEFAULT_N_REPLAYS;
527
+ let successThreshold = DEFAULT_SUCCESS_THRESHOLD;
528
+ let plateauDelta = DEFAULT_PLATEAU_DELTA;
529
+ let plateauWindow = DEFAULT_PLATEAU_WINDOW;
530
+ let outDir = DEFAULT_OUT_DIR;
531
+ let dryRun = false;
532
+ for (let i = 0; i < args.length; i++) {
533
+ if (args[i] === "--site-id" && args[i + 1])
534
+ siteId = args[++i];
535
+ else if (args[i] === "--url" && args[i + 1])
536
+ url = args[++i];
537
+ else if (args[i] === "--max-iterations" && args[i + 1])
538
+ maxIterations = Number(args[++i]);
539
+ else if (args[i] === "--n-replays" && args[i + 1])
540
+ nReplays = Number(args[++i]);
541
+ else if (args[i] === "--success-threshold" && args[i + 1])
542
+ successThreshold = Number(args[++i]);
543
+ else if (args[i] === "--plateau-delta" && args[i + 1])
544
+ plateauDelta = Number(args[++i]);
545
+ else if (args[i] === "--plateau-window" && args[i + 1])
546
+ plateauWindow = Number(args[++i]);
547
+ else if (args[i] === "--out-dir" && args[i + 1])
548
+ outDir = args[++i];
549
+ else if (args[i] === "--dry-run")
550
+ dryRun = true;
551
+ }
552
+ if (!siteId || !url) {
553
+ logger.error("usage: recon-heal.ts --site-id <id> --url <url> [--max-iterations N] [--n-replays N] " +
554
+ "[--success-threshold 0..1] [--plateau-delta 0..1] [--plateau-window N] " +
555
+ "[--out-dir <path>] [--dry-run]");
556
+ process.exit(1);
557
+ }
558
+ return {
559
+ siteId,
560
+ url,
561
+ maxIterations,
562
+ nReplays,
563
+ successThreshold,
564
+ plateauDelta,
565
+ plateauWindow,
566
+ outDir,
567
+ dryRun,
568
+ };
569
+ }
570
+ async function main() {
571
+ const cliArgs = parseCli();
572
+ const { verdict, reportPath, state } = await phaseHeal(cliArgs);
573
+ logger.info(`recon-heal complete: verdict=${verdict}`);
574
+ logger.info(`recon-heal: best_pass_rate=${(state.bestPassRate * 100).toFixed(0)}%`);
575
+ logger.info(`recon-heal: report written to ${reportPath}`);
576
+ }
577
+ if (process.argv[1] !== undefined &&
578
+ (process.argv[1].endsWith("recon-heal.ts") || process.argv[1].endsWith("recon-heal.js"))) {
579
+ main().catch((err) => {
580
+ logger.error(`recon-heal failed: ${String(err)}`);
581
+ process.exit(1);
582
+ });
583
+ }
584
+ //# sourceMappingURL=recon-heal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon-heal.js","sourceRoot":"","sources":["../../src/scripts/recon-heal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Phase 2–3 recon: replays every capture from recon-browser.ts via plain
3
+ * Node fetch() — no browser, no AI — to prove endpoints work standalone.
4
+ *
5
+ * Also runs:
6
+ * - GraphQL introspection probe on each unique GraphQL endpoint
7
+ * - Auxiliary endpoint probe: downloads static JSON fixtures (markets, currencies, etc.)
8
+ * - Rate-limit probe (1 → 3 → 5 rps, stops at first 429/403)
9
+ *
10
+ * Usage:
11
+ * pnpm tsx src/scripts/recon-http.ts [--captures-dir /tmp/recon/graphql]
12
+ *
13
+ * Outputs:
14
+ * /tmp/recon/replays/<filename>.json — one replay result per unique capture
15
+ * /tmp/recon/aux/<basename>.json — downloaded static fixture per auxiliary endpoint
16
+ * /tmp/recon/replays/rate-limit.json — rate-limit probe findings
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=recon-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon-http.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}