@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,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.judgeVerdictSchema = exports.llmCallSampleSchema = exports.llmCallFailureKindSchema = void 0;
4
+ const v4_1 = require("zod/v4");
5
+ /**
6
+ * Re-exports of the call-capture telemetry types so the schema stays the
7
+ * single source of truth. The lib/telemetry/call-capture module is the
8
+ * canonical writer (it owns the schema + classifier helper); this barrel
9
+ * makes the same types available to the judge / self-heal reader paths
10
+ * without a redundant definition that could silently diverge.
11
+ */
12
+ var call_capture_1 = require("../../lib/telemetry/call-capture");
13
+ Object.defineProperty(exports, "llmCallFailureKindSchema", { enumerable: true, get: function () { return call_capture_1.llmCallFailureKindSchema; } });
14
+ Object.defineProperty(exports, "llmCallSampleSchema", { enumerable: true, get: function () { return call_capture_1.llmCallSampleSchema; } });
15
+ /**
16
+ * Per-sample verdict produced by the judge skill. Three boolean dimensions
17
+ * plus an aggregate `pass` (all three must be true).
18
+ */
19
+ const judgeVerdictEntrySchema = v4_1.z.object({
20
+ callId: v4_1.z.string(),
21
+ schemaOk: v4_1.z.boolean(),
22
+ schemaRationale: v4_1.z.string(),
23
+ factuallyGrounded: v4_1.z.boolean(),
24
+ factualRationale: v4_1.z.string(),
25
+ hallucinationFree: v4_1.z.boolean(),
26
+ hallucinationRationale: v4_1.z.string(),
27
+ worstOffender: v4_1.z.string().optional(),
28
+ pass: v4_1.z.boolean(),
29
+ });
30
+ /**
31
+ * Aggregate counts across all judged samples in a verdict file.
32
+ */
33
+ const judgeAggregateSchema = v4_1.z.object({
34
+ n: v4_1.z.number().int(),
35
+ schemaPass: v4_1.z.number().int(),
36
+ factualPass: v4_1.z.number().int(),
37
+ hallucinationFreePass: v4_1.z.number().int(),
38
+ overallPass: v4_1.z.number().int(),
39
+ });
40
+ /**
41
+ * Top-level verdict file produced by the judge skill for one batch. Mirrors
42
+ * beacon/pila's verdict-JSON shape but in Barnacle's camelCase convention.
43
+ */
44
+ exports.judgeVerdictSchema = v4_1.z.object({
45
+ callType: v4_1.z.string(),
46
+ batchIndex: v4_1.z.number().int(),
47
+ judgedAt: v4_1.z.string(),
48
+ judgeModel: v4_1.z.string(),
49
+ verdicts: v4_1.z.array(judgeVerdictEntrySchema),
50
+ aggregate: judgeAggregateSchema,
51
+ });
52
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/api/schemas/telemetry.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAE3B;;;;;;GAMG;AACH,6DAKsC;AAFpC,wHAAA,wBAAwB,OAAA;AACxB,mHAAA,mBAAmB,OAAA;AAGrB;;;GAGG;AACH,MAAM,uBAAuB,GAAG,MAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,MAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,MAAC,CAAC,OAAO,EAAE;IACrB,eAAe,EAAE,MAAC,CAAC,MAAM,EAAE;IAC3B,iBAAiB,EAAE,MAAC,CAAC,OAAO,EAAE;IAC9B,gBAAgB,EAAE,MAAC,CAAC,MAAM,EAAE;IAC5B,iBAAiB,EAAE,MAAC,CAAC,OAAO,EAAE;IAC9B,sBAAsB,EAAE,MAAC,CAAC,MAAM,EAAE;IAClC,aAAa,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,MAAC,CAAC,OAAO,EAAE;CAClB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,oBAAoB,GAAG,MAAC,CAAC,MAAM,CAAC;IACpC,CAAC,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACnB,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC5B,WAAW,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC7B,qBAAqB,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACvC,WAAW,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CAC9B,CAAC,CAAC;AAIH;;;GAGG;AACU,QAAA,kBAAkB,GAAG,MAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC5B,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,MAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC1C,SAAS,EAAE,oBAAoB;CAChC,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Generic per-key TTL cache factory with single-flight warmup coalescing.
3
+ *
4
+ * Why this exists: both `src/cache/response-cache.ts` and
5
+ * `src/sites/appcast/tokens/cache.ts` independently hand-roll the same
6
+ * inFlight Map + LRUCache wiring. Any future site needing a per-key token
7
+ * or session cache would copy it a third time. This factory captures the
8
+ * shared invariant — promise registered synchronously before any yield so
9
+ * concurrent callers coalesce onto one warmup — and adds the shallow-copy-
10
+ * on-read behaviour the token cache needs (returned snapshot is isolated
11
+ * from subsequent in-place mutations of the master entry).
12
+ */
13
+ export interface KeyedTtlCacheOptions {
14
+ max: number;
15
+ ttlMs: number;
16
+ keyPrefix?: string;
17
+ }
18
+ export interface KeyedTtlCache<T extends object> {
19
+ get(key: string): T | undefined;
20
+ set(key: string, value: T): void;
21
+ invalidate(key: string): void;
22
+ getOrWarm(key: string, warmer: () => Promise<T>): Promise<T>;
23
+ reset(): void;
24
+ }
25
+ /**
26
+ * Builds a keyed TTL cache with single-flight coalescing and copy-on-read.
27
+ *
28
+ * Pass `{ max, ttlMs }` to control capacity and expiry. An optional
29
+ * `keyPrefix` namespaces the underlying LRU keys so multiple caches in the
30
+ * same process can share a debug view without colliding.
31
+ *
32
+ * The returned `getOrWarm` uses `.then/.finally` (not `await`) so the
33
+ * in-flight promise is written to the map *synchronously* — before any
34
+ * microtask yield — guaranteeing that every concurrent caller for the same
35
+ * key awaits the same promise instead of kicking off a duplicate warmup.
36
+ * See the same pattern at `response-cache.ts:108-111` and
37
+ * `appcast/tokens/cache.ts:124-125`.
38
+ *
39
+ * `getOrWarm` returns `{ ...value }` (a shallow copy) to each caller so
40
+ * that an in-place mutation of the master cache entry (e.g. rotating a
41
+ * header field) does not bleed into a snapshot already in the hands of
42
+ * another caller.
43
+ */
44
+ export declare function createKeyedTtlCache<T extends object>(options: KeyedTtlCacheOptions): KeyedTtlCache<T>;
45
+ //# sourceMappingURL=keyed-ttl-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-ttl-cache.d.ts","sourceRoot":"","sources":["../../src/cache/keyed-ttl-cache.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAAC,CAAC,CAAC,CAoDlB"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createKeyedTtlCache = createKeyedTtlCache;
4
+ const lru_cache_1 = require("lru-cache");
5
+ /**
6
+ * Builds a keyed TTL cache with single-flight coalescing and copy-on-read.
7
+ *
8
+ * Pass `{ max, ttlMs }` to control capacity and expiry. An optional
9
+ * `keyPrefix` namespaces the underlying LRU keys so multiple caches in the
10
+ * same process can share a debug view without colliding.
11
+ *
12
+ * The returned `getOrWarm` uses `.then/.finally` (not `await`) so the
13
+ * in-flight promise is written to the map *synchronously* — before any
14
+ * microtask yield — guaranteeing that every concurrent caller for the same
15
+ * key awaits the same promise instead of kicking off a duplicate warmup.
16
+ * See the same pattern at `response-cache.ts:108-111` and
17
+ * `appcast/tokens/cache.ts:124-125`.
18
+ *
19
+ * `getOrWarm` returns `{ ...value }` (a shallow copy) to each caller so
20
+ * that an in-place mutation of the master cache entry (e.g. rotating a
21
+ * header field) does not bleed into a snapshot already in the hands of
22
+ * another caller.
23
+ */
24
+ function createKeyedTtlCache(options) {
25
+ const { max, ttlMs, keyPrefix = "" } = options;
26
+ const lru = new lru_cache_1.LRUCache({ max, ttl: ttlMs });
27
+ const inFlight = new Map();
28
+ function prefixed(key) {
29
+ return keyPrefix ? `${keyPrefix}:${key}` : key;
30
+ }
31
+ function get(key) {
32
+ return lru.get(prefixed(key));
33
+ }
34
+ function set(key, value) {
35
+ lru.set(prefixed(key), value);
36
+ }
37
+ function invalidate(key) {
38
+ lru.delete(prefixed(key));
39
+ }
40
+ function getOrWarm(key, warmer) {
41
+ const cached = get(key);
42
+ if (cached)
43
+ return Promise.resolve({ ...cached });
44
+ const pk = prefixed(key);
45
+ const existing = inFlight.get(pk);
46
+ if (existing)
47
+ return existing.then((v) => ({ ...v }));
48
+ // Deliberately .then/.finally rather than await: we must register the
49
+ // promise in `inFlight` synchronously so concurrent callers that race
50
+ // into this function hit the existing entry. An `await` here would
51
+ // yield before the `inFlight.set` below, defeating coalescing.
52
+ const promise = warmer()
53
+ .then((value) => {
54
+ lru.set(pk, value);
55
+ return value;
56
+ })
57
+ .finally(() => {
58
+ inFlight.delete(pk);
59
+ });
60
+ inFlight.set(pk, promise);
61
+ return promise.then((v) => ({ ...v }));
62
+ }
63
+ function reset() {
64
+ lru.clear();
65
+ inFlight.clear();
66
+ }
67
+ return { get, set, invalidate, getOrWarm, reset };
68
+ }
69
+ //# sourceMappingURL=keyed-ttl-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-ttl-cache.js","sourceRoot":"","sources":["../../src/cache/keyed-ttl-cache.ts"],"names":[],"mappings":";;AAgDA,kDAsDC;AAtGD,yCAAqC;AA6BrC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,mBAAmB,CACjC,OAA6B;IAE7B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAE/C,MAAM,GAAG,GAAG,IAAI,oBAAQ,CAAY,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE/C,SAAS,QAAQ,CAAC,GAAW;QAC3B,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,CAAC;IAED,SAAS,GAAG,CAAC,GAAW;QACtB,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,GAAG,CAAC,GAAW,EAAE,KAAQ;QAChC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,UAAU,CAAC,GAAW;QAC7B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS,SAAS,CAAC,GAAW,EAAE,MAAwB;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAO,CAAC,CAAC;QAEvD,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAM,CAAC,CAAC;QAE3D,sEAAsE;QACtE,sEAAsE;QACtE,mEAAmE;QACnE,+DAA+D;QAC/D,MAAM,OAAO,GAAG,MAAM,EAAE;aACrB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACL,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAM,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,KAAK;QACZ,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Looks up a cached response by `endpoint` + `payload` (the normalized
3
+ * request body). Returns the cache key so callers can write the value
4
+ * back via `getOrCreateInFlight` without re-hashing.
5
+ */
6
+ export declare function getCachedResponse<T>(endpoint: string, payload: unknown): {
7
+ value: T | undefined;
8
+ key: string;
9
+ };
10
+ /**
11
+ * Clears the entire cache. Used by tests and by the daily refresh
12
+ * worker after a full rebuild.
13
+ */
14
+ export declare function clearResponseCache(): void;
15
+ /**
16
+ * Returns a snapshot of cache internals for the `/readyz` observability
17
+ * endpoint. Exposed so the health route can surface cache pressure without
18
+ * importing the LRU cache instance directly.
19
+ */
20
+ export declare function cacheStats(): {
21
+ size: number;
22
+ max: number;
23
+ inFlight: number;
24
+ };
25
+ /**
26
+ * Runs `producer` once per key even when multiple callers race on a
27
+ * cache miss. The first caller kicks off the upstream call and all
28
+ * concurrent callers await the same promise. On resolve, the value is
29
+ * written to the LRU cache so subsequent (non-racing) reads hit
30
+ * normally.
31
+ *
32
+ * Callers still do the `getCachedResponse` check first — this helper
33
+ * is only invoked on a miss. Rejection propagates to every awaiter so
34
+ * one caller's failure doesn't look like success to the rest.
35
+ */
36
+ export declare function getOrCreateInFlight<T extends object>(key: string, producer: () => Promise<T>): Promise<T>;
37
+ //# sourceMappingURL=response-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.d.ts","sourceRoot":"","sources":["../../src/cache/response-cache.ts"],"names":[],"mappings":"AA2DA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAGvC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAE5E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EACxD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CAiBZ"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCachedResponse = getCachedResponse;
4
+ exports.clearResponseCache = clearResponseCache;
5
+ exports.cacheStats = cacheStats;
6
+ exports.getOrCreateInFlight = getOrCreateInFlight;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const lru_cache_1 = require("lru-cache");
9
+ const config_1 = require("../config");
10
+ /**
11
+ * Shared in-process response cache keyed by (endpoint, normalized body).
12
+ * Scrape runs are expensive; a 15-minute TTL on identical requests
13
+ * collapses duplicate traffic without staling data for typical integration
14
+ * use cases.
15
+ *
16
+ * Why lru-cache: zero-dep, maintained, O(1) operations, battle-tested.
17
+ * We set `ttl` at construction and rely on lazy expiry on get().
18
+ */
19
+ const cache = new lru_cache_1.LRUCache({
20
+ max: config_1.config.cache.maxEntries,
21
+ ttl: config_1.config.cache.ttlMs,
22
+ });
23
+ /**
24
+ * Tracks upstream calls that are currently resolving for a given key so
25
+ * concurrent cache misses don't all fan out to the scraper. First miss
26
+ * kicks off the work; subsequent misses await the same promise. Each
27
+ * entry is removed after the promise settles (resolve or reject).
28
+ */
29
+ const inFlight = new Map();
30
+ /**
31
+ * Deterministically hashes a JSON-serializable payload for cache keys.
32
+ * Sorts keys so object-key ordering never causes misses.
33
+ */
34
+ function hashKey(endpoint, payload) {
35
+ const canonical = JSON.stringify(payload, canonicalReplacer);
36
+ return `${endpoint}:${(0, node_crypto_1.createHash)("sha256").update(canonical).digest("hex").slice(0, 32)}`;
37
+ }
38
+ function canonicalReplacer(_key, value) {
39
+ if (value && typeof value === "object" && !Array.isArray(value)) {
40
+ const obj = value;
41
+ const sorted = {};
42
+ for (const key of Object.keys(obj).sort()) {
43
+ sorted[key] = obj[key];
44
+ }
45
+ return sorted;
46
+ }
47
+ // Primitive-only arrays are set-semantic in request bodies where field
48
+ // order carries no meaning (e.g. a list of filter tags). Sorting them
49
+ // in the canonical form collapses ["a","b"] and ["b","a"] to the same
50
+ // cache entry without touching arrays of objects (where order may carry
51
+ // meaning).
52
+ if (Array.isArray(value) && value.every((v) => typeof v === "string" || typeof v === "number")) {
53
+ const copy = [...value];
54
+ copy.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
55
+ return copy;
56
+ }
57
+ return value;
58
+ }
59
+ /**
60
+ * Looks up a cached response by `endpoint` + `payload` (the normalized
61
+ * request body). Returns the cache key so callers can write the value
62
+ * back via `getOrCreateInFlight` without re-hashing.
63
+ */
64
+ function getCachedResponse(endpoint, payload) {
65
+ const key = hashKey(endpoint, payload);
66
+ return { value: cache.get(key), key };
67
+ }
68
+ /**
69
+ * Clears the entire cache. Used by tests and by the daily refresh
70
+ * worker after a full rebuild.
71
+ */
72
+ function clearResponseCache() {
73
+ cache.clear();
74
+ inFlight.clear();
75
+ }
76
+ /**
77
+ * Returns a snapshot of cache internals for the `/readyz` observability
78
+ * endpoint. Exposed so the health route can surface cache pressure without
79
+ * importing the LRU cache instance directly.
80
+ */
81
+ function cacheStats() {
82
+ return { size: cache.size, max: cache.max, inFlight: inFlight.size };
83
+ }
84
+ /**
85
+ * Runs `producer` once per key even when multiple callers race on a
86
+ * cache miss. The first caller kicks off the upstream call and all
87
+ * concurrent callers await the same promise. On resolve, the value is
88
+ * written to the LRU cache so subsequent (non-racing) reads hit
89
+ * normally.
90
+ *
91
+ * Callers still do the `getCachedResponse` check first — this helper
92
+ * is only invoked on a miss. Rejection propagates to every awaiter so
93
+ * one caller's failure doesn't look like success to the rest.
94
+ */
95
+ async function getOrCreateInFlight(key, producer) {
96
+ const existing = inFlight.get(key);
97
+ if (existing)
98
+ return existing;
99
+ // Deliberately .then/.finally rather than await: we must register the
100
+ // promise in `inFlight` synchronously so concurrent callers that race
101
+ // into this function hit the existing entry. An `await` here would
102
+ // yield before the `inFlight.set` below, defeating coalescing.
103
+ const promise = producer()
104
+ .then((value) => {
105
+ cache.set(key, value);
106
+ return value;
107
+ })
108
+ .finally(() => {
109
+ inFlight.delete(key);
110
+ });
111
+ inFlight.set(key, promise);
112
+ return promise;
113
+ }
114
+ //# sourceMappingURL=response-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.js","sourceRoot":"","sources":["../../src/cache/response-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Fully resolved, strongly typed application config derived from environment
3
+ * variables at process start. Consumers import the `config` singleton instead
4
+ * of reading `process.env` directly so that required vars are validated once.
5
+ */
6
+ export interface AppConfig {
7
+ appName: string;
8
+ nodeEnv: "development" | "production" | "test";
9
+ host: string;
10
+ port: number;
11
+ logLevel: string;
12
+ auth: {
13
+ hashedKeys: readonly string[];
14
+ devBypass: boolean;
15
+ };
16
+ /**
17
+ * Whether Fastify trusts inbound `X-Forwarded-For` / `X-Forwarded-Proto`.
18
+ * True is correct when Barnacle runs behind a reverse proxy (ALB, nginx,
19
+ * Cloudflare). False is required when deployed directly to the internet
20
+ * — otherwise clients can spoof `X-Forwarded-For` to bypass rate
21
+ * limiting, since the rate-limit key falls back to `request.ip` for
22
+ * unauthenticated traffic.
23
+ */
24
+ trustProxy: boolean;
25
+ scraper: {
26
+ /**
27
+ * Default browser-session provider. Browserbase is the default because
28
+ * Stagehand v3's payload-injection upload path is gated on
29
+ * `env === "BROWSERBASE"` and several other code paths (CDP timeouts,
30
+ * session recovery, event-window timing) only activate in that mode.
31
+ * Steel remains a supported fallback via `SCRAPER_PROVIDER=steel` or the
32
+ * `--provider steel` CLI flag.
33
+ */
34
+ provider: "browserbase" | "steel";
35
+ browserbaseApiKey: string | undefined;
36
+ browserbaseProjectId: string | undefined;
37
+ steelApiKey: string | undefined;
38
+ anthropicApiKey: string | undefined;
39
+ model: string;
40
+ proxyType: string;
41
+ solveCaptcha: boolean;
42
+ poolSize: number;
43
+ minActionDelayMs: number;
44
+ maxActionDelayMs: number;
45
+ readinessQueueThreshold: number;
46
+ /**
47
+ * Per-site base URL overrides keyed by `meta.siteId`. Populated at startup
48
+ * from `BARNACLE_SITE_<UPPERCASE_SITE_ID>_BASE_URL` env vars — underscores
49
+ * in the env key map to hyphens in the siteId. Example:
50
+ * `BARNACLE_SITE_MY_SHOP_BASE_URL=https://staging.my-shop.com` overrides
51
+ * the `my-shop` plugin's `defaultBaseUrl` without any source change.
52
+ * Falls back to `SitePluginMeta.defaultBaseUrl` when the key is absent.
53
+ */
54
+ siteBaseUrls: Record<string, string>;
55
+ /** Master switch: routes Stagehand LLM calls through AWS Bedrock when true. */
56
+ useBedrock: boolean;
57
+ /** Anthropic SDK request timeout in ms. Raise for slow network paths to api.anthropic.com. */
58
+ anthropicTimeoutMs: number;
59
+ /** TCP connect timeout for all outbound fetch calls. Undici default is 10 s; raised to 120 s to match anthropicTimeoutMs. */
60
+ connectTimeoutMs: number;
61
+ /** Steel session wall-clock timeout in ms. Default is 1 hour; lower via STEEL_SESSION_TIMEOUT_MS on plans with shorter limits. */
62
+ steelSessionTimeoutMs: number;
63
+ };
64
+ bedrock: {
65
+ region: string;
66
+ accessKeyId: string | undefined;
67
+ secretAccessKey: string | undefined;
68
+ sessionToken: string | undefined;
69
+ model: string;
70
+ };
71
+ cache: {
72
+ ttlMs: number;
73
+ maxEntries: number;
74
+ };
75
+ rateLimit: {
76
+ max: number;
77
+ windowMs: number;
78
+ };
79
+ docs: {
80
+ enabled: boolean;
81
+ };
82
+ telemetry: {
83
+ /**
84
+ * Master switch — set to false to disable all NDJSON telemetry writes.
85
+ * Useful for environments where the disk path is unavailable or I/O is
86
+ * cost-sensitive; the capture sink checks this before every append.
87
+ */
88
+ enabled: boolean;
89
+ /**
90
+ * Directory that holds per-run NDJSON event stream files. The event-writer
91
+ * creates `<eventsDir>/<runId>.ndjson` at session start. Default matches
92
+ * the `.barnacle/events` path referenced in run-state.ts so operator docs
93
+ * and `.gitignore` stay consistent.
94
+ */
95
+ eventsDir: string;
96
+ /**
97
+ * Absolute or cwd-relative path for the append-only NDJSON file that
98
+ * records one line per LLM/Stagehand call. Feed this to the judge and
99
+ * self-heal skills. Default keeps it alongside the event-stream files.
100
+ */
101
+ callsNdjsonPath: string;
102
+ /**
103
+ * Absolute or cwd-relative path for the append-only NDJSON file that
104
+ * records one line per dispatch outcome — the submission envelope. This
105
+ * is the durable source-of-truth for "what did we submit for jobId X,
106
+ * what did the site return, and did it succeed." Kept on a separate
107
+ * sink from `callsNdjsonPath` so existing judge/heal readers (which
108
+ * Zod-parse every line as an LlmCallSample) stay untouched.
109
+ */
110
+ submissionsNdjsonPath: string;
111
+ /**
112
+ * Rotate / drop the calls NDJSON once it exceeds this byte count.
113
+ * Guards against unbounded disk growth on long-running deployments.
114
+ * Default is 100 MB.
115
+ */
116
+ maxFileSizeBytes: number;
117
+ /**
118
+ * Drop event-stream files older than this many milliseconds. Default is
119
+ * 30 days — long enough for a monthly judge/heal cadence.
120
+ */
121
+ maxRetentionMs: number;
122
+ /**
123
+ * Opt-in buffered S3 sink that mirrors local NDJSON telemetry so it
124
+ * survives ECS container restarts. Entirely inert when `bucket` is
125
+ * undefined — the sink checks this before buffering or flushing.
126
+ */
127
+ s3: {
128
+ /** `TELEMETRY_S3_BUCKET` — destination bucket. Sink is a no-op when unset. */
129
+ bucket: string | undefined;
130
+ /** `TELEMETRY_S3_PREFIX` — key prefix for uploaded NDJSON objects. */
131
+ prefix: string;
132
+ /** `TELEMETRY_S3_FLUSH_INTERVAL_MS` — periodic flush interval. */
133
+ flushIntervalMs: number;
134
+ /** `TELEMETRY_S3_MAX_BUFFER_LINES` — threshold-flush trigger per buffer. */
135
+ maxBufferLines: number;
136
+ };
137
+ };
138
+ judging: {
139
+ /**
140
+ * Anthropic model used by the judge script to score captured call samples.
141
+ * Defaults to the Bedrock cross-region inference profile so it reuses the
142
+ * scraper's AWS creds without a separate billing account.
143
+ */
144
+ model: string;
145
+ /**
146
+ * Sampling temperature for judge LLM calls. Lower values (≤ 0.3) produce
147
+ * more deterministic verdicts; raise only for exploratory runs.
148
+ */
149
+ temperature: number;
150
+ /**
151
+ * Number of call samples sent to the judge in one LLM request. Larger
152
+ * batches reduce round-trips but increase per-call token cost.
153
+ */
154
+ batchSize: number;
155
+ /**
156
+ * Anthropic SDK request timeout for judge calls in ms. Judge batches are
157
+ * larger than scraper calls so a longer timeout is warranted.
158
+ */
159
+ timeoutMs: number;
160
+ };
161
+ /**
162
+ * testmail.app — fresh inboxes for recon runs + integration tests.
163
+ * Both fields nullable so a missing API key doesn't break unrelated
164
+ * config loads; the testmail helpers throw clear errors when called
165
+ * without configuration.
166
+ */
167
+ testmail: {
168
+ /** `TESTMAIL_API_KEY` — get from https://testmail.app/console */
169
+ apiKey: string | undefined;
170
+ /** `TESTMAIL_NAMESPACE` — the subdomain piece (e.g. "abc12" for `abc12.{tag}@inbox.testmail.app`). */
171
+ namespace: string | undefined;
172
+ };
173
+ selfheal: {
174
+ /**
175
+ * Maximum patch→replay→score iterations before giving up with
176
+ * BUDGET_EXHAUSTED. Mirrors the recon-heal default of 5.
177
+ */
178
+ maxIterations: number;
179
+ /**
180
+ * Number of replay runs per iteration arm. Replays are cheap (no browser),
181
+ * so a higher n gives a more stable pass-rate estimate.
182
+ */
183
+ nReplays: number;
184
+ /**
185
+ * Minimum pass rate (0..1) to declare SUCCESS and stop iterating.
186
+ * Mirrors the pila llm-self-heal SKILL default of 0.9.
187
+ */
188
+ successThreshold: number;
189
+ /**
190
+ * Consecutive iterations whose pass-rate improvement is below
191
+ * `plateauDelta` that triggers a PLATEAUED verdict. Mirrors recon-heal.
192
+ */
193
+ plateauWindow: number;
194
+ /**
195
+ * Minimum absolute improvement in pass rate between iterations to be
196
+ * considered meaningful progress; below this the run plateaus.
197
+ */
198
+ plateauDelta: number;
199
+ /**
200
+ * Per-replay LLM request timeout in ms. Patch replay calls are small
201
+ * single-turn requests so a tighter timeout keeps the loop fast.
202
+ */
203
+ timeoutMs: number;
204
+ };
205
+ datadog: {
206
+ /** Master switch — dd-trace only initializes when true. */
207
+ traceEnabled: boolean;
208
+ /** Hostname of the DD agent sidecar (localhost in ECS Fargate). */
209
+ agentHost: string;
210
+ /** DogStatsD UDP port on the agent host. */
211
+ statsdPort: number;
212
+ /** Service name emitted on all spans, metrics, and logs. */
213
+ service: string;
214
+ /** Deployment environment tag (production, staging, development). */
215
+ env: string;
216
+ /** Application version tag — git SHA or package version. */
217
+ version: string;
218
+ };
219
+ /**
220
+ * Out-of-tree plugin loading. Operators point `BARNACLE_PLUGINS` at their
221
+ * own compiled plugin modules; core discovers, validates, and registers them
222
+ * at startup without any source change.
223
+ */
224
+ plugins: {
225
+ /**
226
+ * Comma-separated list of plugin specifiers — relative paths
227
+ * (`./plugins/acme`) or package names (`@acme/barnacle-plugin`).
228
+ * Parsed from `BARNACLE_PLUGINS`; empty by default (built-ins only).
229
+ */
230
+ specifiers: readonly string[];
231
+ /**
232
+ * When true, any plugin that fails to load aborts the process.
233
+ * When false (default), failures produce a disabled record and a warn log.
234
+ */
235
+ strict: boolean;
236
+ /**
237
+ * Base directory used to resolve relative plugin specifiers and to locate
238
+ * the operator's `node_modules` for package-name specifiers. Defaults to
239
+ * `process.cwd()` so paths are relative to wherever the operator runs the
240
+ * binary — NOT the installed Barnacle package root.
241
+ */
242
+ baseDir: string;
243
+ /**
244
+ * Optional directory scanned at startup for `*.plugin.json` manifests, each
245
+ * loaded as a config-only plugin. Lets operators register sites by dropping
246
+ * a file in a directory instead of editing `BARNACLE_PLUGINS`. Parsed from
247
+ * `BARNACLE_PLUGINS_CONFIG_DIR`; unset means no directory scan.
248
+ */
249
+ configDir: string | undefined;
250
+ };
251
+ }
252
+ /**
253
+ * Loads and validates the application config. Call this once at process
254
+ * startup; subsequent calls return the same frozen object.
255
+ */
256
+ export declare function loadConfig(): AppConfig;
257
+ export declare const config: AppConfig;
258
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}