@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,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fastify_plugin_1 = __importDefault(require("fastify-plugin"));
7
+ const nanoid_1 = require("nanoid");
8
+ const REQUEST_ID_HEADER = "x-request-id";
9
+ const CORRELATION_ID_HEADER = "x-correlation-id";
10
+ /**
11
+ * Inbound trace-id charset: letters, digits, and `-._:` — the intersection
12
+ * of W3C trace-context, Fastify defaults, AWS X-Ray, and OpenTelemetry.
13
+ * Anything outside is either a typo or a log-poisoning attempt; we'd rather
14
+ * mint a fresh id than echo a CRLF / HTML / JSON fragment straight into
15
+ * structured logs and downstream response headers.
16
+ */
17
+ const TRACE_ID_ALLOWED = /^[A-Za-z0-9._:-]+$/;
18
+ const TRACE_ID_MAX_LEN = 128;
19
+ function isValidTraceId(value) {
20
+ return (typeof value === "string" &&
21
+ value.length > 0 &&
22
+ value.length <= TRACE_ID_MAX_LEN &&
23
+ TRACE_ID_ALLOWED.test(value));
24
+ }
25
+ /**
26
+ * Propagates request IDs and correlation IDs so logs can be stitched across
27
+ * services. We echo an inbound X-Request-ID when provided, otherwise
28
+ * generate a nanoid (replacing Fastify's per-process `req-N` default,
29
+ * which collides across pods), and always echo on response. Correlation
30
+ * IDs are echo-only — we never invent one.
31
+ */
32
+ async function requestContextPlugin(app) {
33
+ app.addHook("onRequest", async (request) => {
34
+ const incomingRequestId = request.headers[REQUEST_ID_HEADER];
35
+ if (isValidTraceId(incomingRequestId)) {
36
+ request.id = incomingRequestId;
37
+ }
38
+ else {
39
+ // Fastify assigns a short local `req-N` id before this hook runs,
40
+ // so we always replace it with a nanoid when the caller didn't
41
+ // supply a trace id (or sent a malformed one). nanoid gives a
42
+ // cross-process unique id so log aggregators can stitch requests
43
+ // without collisions.
44
+ request.id = (0, nanoid_1.nanoid)();
45
+ }
46
+ const incomingCorrelationId = request.headers[CORRELATION_ID_HEADER];
47
+ if (isValidTraceId(incomingCorrelationId)) {
48
+ request.correlationId = incomingCorrelationId;
49
+ }
50
+ });
51
+ app.addHook("onSend", async (request, reply) => {
52
+ reply.header(REQUEST_ID_HEADER, request.id);
53
+ if (request.correlationId) {
54
+ reply.header(CORRELATION_ID_HEADER, request.correlationId);
55
+ }
56
+ });
57
+ }
58
+ exports.default = (0, fastify_plugin_1.default)(requestContextPlugin, {
59
+ name: "request-context",
60
+ });
61
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../../src/api/plugins/request-context.ts"],"names":[],"mappings":";;;;;AACA,oEAAgC;AAChC,mCAAgC;AAEhC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AACzC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAC9C,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,MAAM,IAAI,gBAAgB;QAChC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7B,CAAC;AACJ,CAAC;AAQD;;;;;;GAMG;AACH,KAAK,UAAU,oBAAoB,CAAC,GAAoB;IACtD,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAuB,EAAE,EAAE;QACzD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,EAAE,GAAG,iBAAiB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,kEAAkE;YAClE,+DAA+D;YAC/D,8DAA8D;YAC9D,iEAAiE;YACjE,sBAAsB;YACtB,OAAO,CAAC,EAAE,GAAG,IAAA,eAAM,GAAE,CAAC;QACxB,CAAC;QACD,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACrE,IAAI,cAAc,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,aAAa,GAAG,qBAAqB,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7C,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,qBAAqB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,IAAA,wBAAE,EAAC,oBAAoB,EAAE;IACtC,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import { type RunState } from "../../lib/telemetry/run-state";
3
+ /**
4
+ * Narrow subset of AppConfig the readiness probe needs. Kept inline
5
+ * rather than imported as `Pick<AppConfig,…>` to keep this module
6
+ * decoupled — health checks shouldn't be coupled to config surface
7
+ * churn beyond these fields.
8
+ */
9
+ export interface HealthConfig {
10
+ scraper: {
11
+ steelApiKey: string | undefined;
12
+ anthropicApiKey: string | undefined;
13
+ readinessQueueThreshold: number;
14
+ useBedrock: boolean;
15
+ };
16
+ bedrock: {
17
+ accessKeyId: string | undefined;
18
+ secretAccessKey: string | undefined;
19
+ region: string;
20
+ };
21
+ }
22
+ interface HealthRoutesOptions {
23
+ config?: HealthConfig;
24
+ /** Override for tests — defaults to the live pool stats. */
25
+ poolStats?: () => {
26
+ size: number;
27
+ pending: number;
28
+ concurrency: number;
29
+ };
30
+ /** Override for tests — defaults to the live response-cache stats. */
31
+ cacheStats?: () => {
32
+ size: number;
33
+ max: number;
34
+ inFlight: number;
35
+ };
36
+ /** Override for tests — defaults to the live telemetry run state. */
37
+ telemetryState?: () => RunState;
38
+ /**
39
+ * Override for tests — root directory scanned for heal-out/<siteId>/healing-<siteId>.md.
40
+ * Defaults to process.cwd().
41
+ */
42
+ healOutRoot?: string;
43
+ }
44
+ /**
45
+ * Health and readiness probes. Ops-only routes — bypass auth and return plain JSON instead
46
+ * of the standard envelope. `/healthz` is a liveness check (process is up). `/readyz`
47
+ * verifies external dependencies and downgrades to 503 when any are
48
+ * unreachable so orchestrators stop routing traffic.
49
+ *
50
+ * Config is injected so tests can swap in specific states without
51
+ * relying on frozen-at-import process.env.
52
+ */
53
+ export declare function healthRoutes(app: FastifyInstance, options?: HealthRoutesOptions): Promise<void>;
54
+ export {};
55
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/api/routes/health.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAK7D,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAiD7E;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,uBAAuB,EAAE,MAAM,CAAC;QAChC,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,QAAQ,CAAC;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8FD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.healthRoutes = healthRoutes;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const response_cache_1 = require("../../cache/response-cache");
7
+ const config_1 = require("../../config");
8
+ const logging_1 = require("../../lib/logging");
9
+ const run_state_1 = require("../../lib/telemetry/run-state");
10
+ const metrics_1 = require("../../scraper/metrics");
11
+ const pool_1 = require("../../scraper/pool");
12
+ const logger = (0, logging_1.getLogger)({ name: "routes/health" });
13
+ /**
14
+ * Confirms the scraper has the secrets it needs. When Bedrock is enabled,
15
+ * validates key-pair consistency: if one of accessKeyId/secretAccessKey is
16
+ * set the other must be too. If neither is set, ambient IAM credentials are
17
+ * assumed (ECS task role, EC2 instance profile) — these can't be probed
18
+ * synchronously at health-check time. When Anthropic is the provider,
19
+ * verifies the API key is present.
20
+ */
21
+ function checkScraperCredentials(cfg) {
22
+ const missing = [];
23
+ if (!cfg.scraper.steelApiKey)
24
+ missing.push("STEEL_API_KEY");
25
+ if (cfg.scraper.useBedrock) {
26
+ if (cfg.bedrock.accessKeyId && !cfg.bedrock.secretAccessKey) {
27
+ missing.push("AWS_SECRET_ACCESS_KEY");
28
+ }
29
+ if (!cfg.bedrock.accessKeyId && cfg.bedrock.secretAccessKey) {
30
+ missing.push("AWS_ACCESS_KEY_ID");
31
+ }
32
+ }
33
+ else {
34
+ if (!cfg.scraper.anthropicApiKey)
35
+ missing.push("ANTHROPIC_API_KEY");
36
+ }
37
+ if (missing.length === 0)
38
+ return { ok: true };
39
+ return { ok: false, detail: `missing: ${missing.join(", ")}` };
40
+ }
41
+ /**
42
+ * Flags back-pressure on the Stagehand task queue. When queue depth
43
+ * (waiting + in-flight) exceeds `readinessQueueThreshold`, orchestrators
44
+ * should stop sending new work — additional requests would just pile
45
+ * onto an already-saturated pool and time out in client SLAs.
46
+ */
47
+ function checkScraperPool(cfg, stats) {
48
+ const s = stats();
49
+ const depth = s.size + s.pending;
50
+ if (depth <= cfg.scraper.readinessQueueThreshold) {
51
+ return { ok: true, detail: `depth=${depth}` };
52
+ }
53
+ return {
54
+ ok: false,
55
+ detail: `queue depth ${depth} exceeds threshold ${cfg.scraper.readinessQueueThreshold}`,
56
+ };
57
+ }
58
+ /**
59
+ * Scans heal-out/<siteId>/healing-<siteId>.md files under `rootDir` and
60
+ * extracts the verdict and best-pass-rate lines written by writeHealReport().
61
+ * Returns an empty object when the heal-out directory doesn't exist yet —
62
+ * the caller treats absence as "no healing runs performed."
63
+ */
64
+ function readHealSummaries(rootDir) {
65
+ const healOut = (0, node_path_1.resolve)((0, node_path_1.join)(rootDir, "heal-out"));
66
+ if (!(0, node_fs_1.existsSync)(healOut))
67
+ return {};
68
+ const result = {};
69
+ let siteDirs;
70
+ try {
71
+ siteDirs = (0, node_fs_1.readdirSync)(healOut, { withFileTypes: true })
72
+ .filter((e) => e.isDirectory())
73
+ .map((e) => e.name);
74
+ }
75
+ catch {
76
+ return {};
77
+ }
78
+ for (const siteId of siteDirs) {
79
+ const reportPath = (0, node_path_1.join)(healOut, siteId, `healing-${siteId}.md`);
80
+ if (!(0, node_fs_1.existsSync)(reportPath))
81
+ continue;
82
+ let content;
83
+ try {
84
+ content = (0, node_fs_1.readFileSync)(reportPath, "utf-8");
85
+ }
86
+ catch {
87
+ continue;
88
+ }
89
+ const verdictMatch = /^\*\*Verdict:\*\*\s+(\S+)/m.exec(content);
90
+ const passRateMatch = /^\*\*Best pass rate:\*\*\s+(\d+)%/m.exec(content);
91
+ if (!verdictMatch)
92
+ continue;
93
+ const verdict = verdictMatch[1] ?? "UNKNOWN";
94
+ const bestPassRate = passRateMatch ? Number(passRateMatch[1]) / 100 : 0;
95
+ result[siteId] = { verdict, bestPassRate, reportPath: (0, node_path_1.resolve)(reportPath) };
96
+ }
97
+ return result;
98
+ }
99
+ /**
100
+ * Health and readiness probes. Ops-only routes — bypass auth and return plain JSON instead
101
+ * of the standard envelope. `/healthz` is a liveness check (process is up). `/readyz`
102
+ * verifies external dependencies and downgrades to 503 when any are
103
+ * unreachable so orchestrators stop routing traffic.
104
+ *
105
+ * Config is injected so tests can swap in specific states without
106
+ * relying on frozen-at-import process.env.
107
+ */
108
+ async function healthRoutes(app, options = {}) {
109
+ const cfg = options.config ?? config_1.config;
110
+ app.get("/healthz", async () => ({ status: "ok" }));
111
+ const poolStatsFn = options.poolStats ?? pool_1.poolStats;
112
+ const cacheStatsFn = options.cacheStats ?? response_cache_1.cacheStats;
113
+ const telemetryStateFn = options.telemetryState ?? run_state_1.getTelemetryState;
114
+ const healOutRoot = options.healOutRoot ?? process.cwd();
115
+ app.get("/readyz", async (_request, reply) => {
116
+ const scraperCredentials = checkScraperCredentials(cfg);
117
+ const scraperPool = checkScraperPool(cfg, poolStatsFn);
118
+ const allOk = scraperCredentials.ok && scraperPool.ok;
119
+ const report = {
120
+ status: allOk ? "ready" : "degraded",
121
+ checks: { scraperCredentials, scraperPool },
122
+ stats: {
123
+ scraperPool: poolStatsFn(),
124
+ cache: cacheStatsFn(),
125
+ metrics: (0, metrics_1.allMetrics)(),
126
+ },
127
+ telemetry: telemetryStateFn(),
128
+ heal: readHealSummaries(healOutRoot),
129
+ };
130
+ if (!allOk) {
131
+ logger.warn(`readyz degraded: scraperCreds=${scraperCredentials.ok ? "ok" : scraperCredentials.detail} pool=${scraperPool.ok ? "ok" : scraperPool.detail}`);
132
+ reply.code(503);
133
+ }
134
+ return report;
135
+ });
136
+ }
137
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/api/routes/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ import type { PluginLoadRecord } from "../../plugins/discover";
3
+ /**
4
+ * Injectable options for `pluginsIntrospectionRoutes`. The report is passed
5
+ * in at registration time so the route can be tested without spinning up the
6
+ * full server and plugin-loading pipeline.
7
+ */
8
+ export interface PluginsIntrospectionOptions {
9
+ report: PluginLoadRecord[];
10
+ }
11
+ /**
12
+ * Exposes the plugin load report behind authentication. Separate from
13
+ * `healthRoutes` because it reveals filesystem paths (resolved plugin paths)
14
+ * that must not be visible to unauthenticated callers.
15
+ */
16
+ export declare function pluginsIntrospectionRoutes(app: FastifyInstance, options: PluginsIntrospectionOptions): Promise<void>;
17
+ //# sourceMappingURL=plugins-introspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins-introspection.d.ts","sourceRoot":"","sources":["../../../src/api/routes/plugins-introspection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pluginsIntrospectionRoutes = pluginsIntrospectionRoutes;
4
+ /**
5
+ * Exposes the plugin load report behind authentication. Separate from
6
+ * `healthRoutes` because it reveals filesystem paths (resolved plugin paths)
7
+ * that must not be visible to unauthenticated callers.
8
+ */
9
+ async function pluginsIntrospectionRoutes(app, options) {
10
+ const { report } = options;
11
+ app.get("/v1/plugins", { onRequest: [app.authenticate] }, async () => report);
12
+ }
13
+ //# sourceMappingURL=plugins-introspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins-introspection.js","sourceRoot":"","sources":["../../../src/api/routes/plugins-introspection.ts"],"names":[],"mappings":";;AAkBA,gEAWC;AAhBD;;;;GAIG;AACI,KAAK,UAAU,0BAA0B,CAC9C,GAAoB,EACpB,OAAoC;IAEpC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,GAAG,CAAC,GAAG,CACL,aAAa,EACb,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EACjC,KAAK,IAAiC,EAAE,CAAC,MAAM,CAChD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { z } from "zod/v4";
2
+ /**
3
+ * Error code registry and HTTP status envelope schema shared across all
4
+ * API responses. The envelope shape keeps every response — success and
5
+ * error — parseable by a single client-side decoder.
6
+ */
7
+ export declare const ERROR_CODES: {
8
+ readonly PARTIAL_CONTENT_SUCCESS: 1000;
9
+ readonly DECODING_ERROR: 1001;
10
+ readonly FIELD_VIOLATION: 1002;
11
+ readonly EMPTY_REQUEST: 1003;
12
+ readonly AUTHORIZATION_ERROR: 1004;
13
+ readonly RESOURCE_NOT_FOUND: 1005;
14
+ readonly INDEX_NOT_FOUND: 1006;
15
+ readonly CLIENT_CALL_ERROR: 1007;
16
+ readonly GENERIC_ERROR: 1008;
17
+ readonly EXTRA_DETAIL: 1009;
18
+ readonly THROTTLED_REQUEST: 1010;
19
+ readonly TIME_OUT: 1011;
20
+ readonly SCRAPE_FAILURE: 2003;
21
+ readonly CAPTCHA_ENCOUNTERED: 2004;
22
+ readonly EMPTY_RESULTS: 2005;
23
+ readonly VERIFICATION_TRIGGER_FAILED: 2006;
24
+ readonly RESUME_INVALID_OTP: 2007;
25
+ readonly URL_LOCKED: 2008;
26
+ };
27
+ export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
28
+ /**
29
+ * Reverse lookup: numeric code → canonical description. Used to render
30
+ * `codeDescription` on the wire.
31
+ */
32
+ export declare const ERROR_CODE_DESCRIPTIONS: Record<ErrorCode, string>;
33
+ /**
34
+ * The envelope every response is wrapped in. Success and error responses
35
+ * both carry this status block so clients can share a single parser.
36
+ */
37
+ export declare const statusSchema: z.ZodObject<{
38
+ httpStatus: z.ZodUnion<[z.ZodEnum<{
39
+ OK: "OK";
40
+ BAD_REQUEST: "BAD_REQUEST";
41
+ UNAUTHORIZED: "UNAUTHORIZED";
42
+ FORBIDDEN: "FORBIDDEN";
43
+ NOT_FOUND: "NOT_FOUND";
44
+ TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
45
+ INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR";
46
+ SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE";
47
+ GATEWAY_TIMEOUT: "GATEWAY_TIMEOUT";
48
+ }>, z.ZodString]>;
49
+ dateTime: z.ZodString;
50
+ details: z.ZodDefault<z.ZodArray<z.ZodObject<{
51
+ code: z.ZodNumber;
52
+ codeDescription: z.ZodString;
53
+ detailType: z.ZodOptional<z.ZodString>;
54
+ message: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$loose>>>;
56
+ }, z.core.$loose>;
57
+ /**
58
+ * Response envelope emitted by dispatch when the hot path cannot complete
59
+ * the application because the user must supply additional information (e.g.
60
+ * missing profile fields or an OTP code). Returned as HTTP 200 so clients
61
+ * can parse it without branching on status codes.
62
+ */
63
+ export declare const needsUserInfoResponseSchema: z.ZodObject<{
64
+ status: z.ZodObject<{
65
+ httpStatus: z.ZodUnion<[z.ZodEnum<{
66
+ OK: "OK";
67
+ BAD_REQUEST: "BAD_REQUEST";
68
+ UNAUTHORIZED: "UNAUTHORIZED";
69
+ FORBIDDEN: "FORBIDDEN";
70
+ NOT_FOUND: "NOT_FOUND";
71
+ TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
72
+ INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR";
73
+ SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE";
74
+ GATEWAY_TIMEOUT: "GATEWAY_TIMEOUT";
75
+ }>, z.ZodString]>;
76
+ dateTime: z.ZodString;
77
+ details: z.ZodDefault<z.ZodArray<z.ZodObject<{
78
+ code: z.ZodNumber;
79
+ codeDescription: z.ZodString;
80
+ detailType: z.ZodOptional<z.ZodString>;
81
+ message: z.ZodOptional<z.ZodString>;
82
+ }, z.core.$loose>>>;
83
+ }, z.core.$loose>;
84
+ needsUserInfo: z.ZodLiteral<true>;
85
+ missingFields: z.ZodArray<z.ZodObject<{
86
+ field: z.ZodString;
87
+ question: z.ZodString;
88
+ }, z.core.$strip>>;
89
+ requiresOtp: z.ZodBoolean;
90
+ metrics: z.ZodOptional<z.ZodObject<{
91
+ totalDurationMs: z.ZodNumber;
92
+ path: z.ZodEnum<{
93
+ http: "http";
94
+ browser: "browser";
95
+ }>;
96
+ steps: z.ZodArray<z.ZodObject<{
97
+ step: z.ZodString;
98
+ durationMs: z.ZodNumber;
99
+ status: z.ZodEnum<{
100
+ success: "success";
101
+ failed: "failed";
102
+ skipped: "skipped";
103
+ }>;
104
+ error: z.ZodOptional<z.ZodString>;
105
+ }, z.core.$strip>>;
106
+ errorType: z.ZodOptional<z.ZodString>;
107
+ errorStep: z.ZodOptional<z.ZodString>;
108
+ attemptCount: z.ZodNumber;
109
+ startedAt: z.ZodString;
110
+ endedAt: z.ZodString;
111
+ recordedAt: z.ZodString;
112
+ }, z.core.$strip>>;
113
+ }, z.core.$strip>;
114
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/api/schemas/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;CAmBd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAmB7D,CAAC;AA+BF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;iBAMf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWtC,CAAC"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.needsUserInfoResponseSchema = exports.statusSchema = exports.ERROR_CODE_DESCRIPTIONS = exports.ERROR_CODES = void 0;
4
+ const v4_1 = require("zod/v4");
5
+ const dispatch_metrics_1 = require("../../types/dispatch-metrics");
6
+ /**
7
+ * Error code registry and HTTP status envelope schema shared across all
8
+ * API responses. The envelope shape keeps every response — success and
9
+ * error — parseable by a single client-side decoder.
10
+ */
11
+ exports.ERROR_CODES = {
12
+ PARTIAL_CONTENT_SUCCESS: 1000,
13
+ DECODING_ERROR: 1001,
14
+ FIELD_VIOLATION: 1002,
15
+ EMPTY_REQUEST: 1003,
16
+ AUTHORIZATION_ERROR: 1004,
17
+ RESOURCE_NOT_FOUND: 1005,
18
+ INDEX_NOT_FOUND: 1006,
19
+ CLIENT_CALL_ERROR: 1007,
20
+ GENERIC_ERROR: 1008,
21
+ EXTRA_DETAIL: 1009,
22
+ THROTTLED_REQUEST: 1010,
23
+ TIME_OUT: 1011,
24
+ SCRAPE_FAILURE: 2003,
25
+ CAPTCHA_ENCOUNTERED: 2004,
26
+ EMPTY_RESULTS: 2005,
27
+ VERIFICATION_TRIGGER_FAILED: 2006,
28
+ RESUME_INVALID_OTP: 2007,
29
+ URL_LOCKED: 2008,
30
+ };
31
+ /**
32
+ * Reverse lookup: numeric code → canonical description. Used to render
33
+ * `codeDescription` on the wire.
34
+ */
35
+ exports.ERROR_CODE_DESCRIPTIONS = {
36
+ 1000: "PARTIAL_CONTENT_SUCCESS",
37
+ 1001: "DECODING_ERROR",
38
+ 1002: "FIELD_VIOLATION",
39
+ 1003: "EMPTY_REQUEST",
40
+ 1004: "AUTHORIZATION_ERROR",
41
+ 1005: "RESOURCE_NOT_FOUND",
42
+ 1006: "INDEX_NOT_FOUND",
43
+ 1007: "CLIENT_CALL_ERROR",
44
+ 1008: "GENERIC_ERROR",
45
+ 1009: "EXTRA_DETAIL",
46
+ 1010: "THROTTLED_REQUEST",
47
+ 1011: "TIME_OUT",
48
+ 2003: "SCRAPE_FAILURE",
49
+ 2004: "CAPTCHA_ENCOUNTERED",
50
+ 2005: "EMPTY_RESULTS",
51
+ 2006: "VERIFICATION_TRIGGER_FAILED",
52
+ 2007: "RESUME_INVALID_OTP",
53
+ 2008: "URL_LOCKED",
54
+ };
55
+ /**
56
+ * HTTP status strings (upper-snake-case) used in the response envelope.
57
+ */
58
+ const httpStatusSchema = v4_1.z
59
+ .enum([
60
+ "OK",
61
+ "BAD_REQUEST",
62
+ "UNAUTHORIZED",
63
+ "FORBIDDEN",
64
+ "NOT_FOUND",
65
+ "TOO_MANY_REQUESTS",
66
+ "INTERNAL_SERVER_ERROR",
67
+ "SERVICE_UNAVAILABLE",
68
+ "GATEWAY_TIMEOUT",
69
+ ])
70
+ .or(v4_1.z.string());
71
+ /**
72
+ * Single entry in the `status.details[]` array.
73
+ */
74
+ const statusDetailSchema = v4_1.z
75
+ .object({
76
+ code: v4_1.z.number().int(),
77
+ codeDescription: v4_1.z.string(),
78
+ detailType: v4_1.z.string().optional(),
79
+ message: v4_1.z.string().optional(),
80
+ })
81
+ .loose();
82
+ /**
83
+ * The envelope every response is wrapped in. Success and error responses
84
+ * both carry this status block so clients can share a single parser.
85
+ */
86
+ exports.statusSchema = v4_1.z
87
+ .object({
88
+ httpStatus: httpStatusSchema,
89
+ dateTime: v4_1.z.string(),
90
+ details: v4_1.z.array(statusDetailSchema).default([]),
91
+ })
92
+ .loose();
93
+ /**
94
+ * Response envelope emitted by dispatch when the hot path cannot complete
95
+ * the application because the user must supply additional information (e.g.
96
+ * missing profile fields or an OTP code). Returned as HTTP 200 so clients
97
+ * can parse it without branching on status codes.
98
+ */
99
+ exports.needsUserInfoResponseSchema = v4_1.z.object({
100
+ status: exports.statusSchema,
101
+ needsUserInfo: v4_1.z.literal(true),
102
+ missingFields: v4_1.z.array(v4_1.z.object({
103
+ field: v4_1.z.string(),
104
+ question: v4_1.z.string(),
105
+ })),
106
+ requiresOtp: v4_1.z.boolean(),
107
+ metrics: dispatch_metrics_1.DispatchMetricsSchema.optional(),
108
+ });
109
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/api/schemas/common.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAE3B,+DAAiE;AAEjE;;;;GAIG;AACU,QAAA,WAAW,GAAG;IACzB,uBAAuB,EAAE,IAAI;IAC7B,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,mBAAmB,EAAE,IAAI;IACzB,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,IAAI;IACzB,aAAa,EAAE,IAAI;IACnB,2BAA2B,EAAE,IAAI;IACjC,kBAAkB,EAAE,IAAI;IACxB,UAAU,EAAE,IAAI;CACR,CAAC;AAIX;;;GAGG;AACU,QAAA,uBAAuB,GAA8B;IAChE,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAG,MAAC;KACvB,IAAI,CAAC;IACJ,IAAI;IACJ,aAAa;IACb,cAAc;IACd,WAAW;IACX,WAAW;IACX,mBAAmB;IACnB,uBAAuB;IACvB,qBAAqB;IACrB,iBAAiB;CAClB,CAAC;KACD,EAAE,CAAC,MAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAElB;;GAEG;AACH,MAAM,kBAAkB,GAAG,MAAC;KACzB,MAAM,CAAC;IACN,IAAI,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACtB,eAAe,EAAE,MAAC,CAAC,MAAM,EAAE;IAC3B,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,KAAK,EAAE,CAAC;AAEX;;;GAGG;AACU,QAAA,YAAY,GAAG,MAAC;KAC1B,MAAM,CAAC;IACN,UAAU,EAAE,gBAAgB;IAC5B,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,MAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACjD,CAAC;KACD,KAAK,EAAE,CAAC;AAEX;;;;;GAKG;AACU,QAAA,2BAA2B,GAAG,MAAC,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,oBAAY;IACpB,aAAa,EAAE,MAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAC,CAAC,KAAK,CACpB,MAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,MAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CACH;IACD,WAAW,EAAE,MAAC,CAAC,OAAO,EAAE;IACxB,OAAO,EAAE,wCAAqB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod/v4";
2
+ /**
3
+ * Re-exports of the call-capture telemetry types so the schema stays the
4
+ * single source of truth. The lib/telemetry/call-capture module is the
5
+ * canonical writer (it owns the schema + classifier helper); this barrel
6
+ * makes the same types available to the judge / self-heal reader paths
7
+ * without a redundant definition that could silently diverge.
8
+ */
9
+ export { type LlmCallFailureKind, type LlmCallSample, llmCallFailureKindSchema, llmCallSampleSchema, } from "../../lib/telemetry/call-capture";
10
+ /**
11
+ * Per-sample verdict produced by the judge skill. Three boolean dimensions
12
+ * plus an aggregate `pass` (all three must be true).
13
+ */
14
+ declare const judgeVerdictEntrySchema: z.ZodObject<{
15
+ callId: z.ZodString;
16
+ schemaOk: z.ZodBoolean;
17
+ schemaRationale: z.ZodString;
18
+ factuallyGrounded: z.ZodBoolean;
19
+ factualRationale: z.ZodString;
20
+ hallucinationFree: z.ZodBoolean;
21
+ hallucinationRationale: z.ZodString;
22
+ worstOffender: z.ZodOptional<z.ZodString>;
23
+ pass: z.ZodBoolean;
24
+ }, z.core.$strip>;
25
+ export type JudgeVerdictEntry = z.infer<typeof judgeVerdictEntrySchema>;
26
+ /**
27
+ * Aggregate counts across all judged samples in a verdict file.
28
+ */
29
+ declare const judgeAggregateSchema: z.ZodObject<{
30
+ n: z.ZodNumber;
31
+ schemaPass: z.ZodNumber;
32
+ factualPass: z.ZodNumber;
33
+ hallucinationFreePass: z.ZodNumber;
34
+ overallPass: z.ZodNumber;
35
+ }, z.core.$strip>;
36
+ export type JudgeAggregate = z.infer<typeof judgeAggregateSchema>;
37
+ /**
38
+ * Top-level verdict file produced by the judge skill for one batch. Mirrors
39
+ * beacon/pila's verdict-JSON shape but in Barnacle's camelCase convention.
40
+ */
41
+ export declare const judgeVerdictSchema: z.ZodObject<{
42
+ callType: z.ZodString;
43
+ batchIndex: z.ZodNumber;
44
+ judgedAt: z.ZodString;
45
+ judgeModel: z.ZodString;
46
+ verdicts: z.ZodArray<z.ZodObject<{
47
+ callId: z.ZodString;
48
+ schemaOk: z.ZodBoolean;
49
+ schemaRationale: z.ZodString;
50
+ factuallyGrounded: z.ZodBoolean;
51
+ factualRationale: z.ZodString;
52
+ hallucinationFree: z.ZodBoolean;
53
+ hallucinationRationale: z.ZodString;
54
+ worstOffender: z.ZodOptional<z.ZodString>;
55
+ pass: z.ZodBoolean;
56
+ }, z.core.$strip>>;
57
+ aggregate: z.ZodObject<{
58
+ n: z.ZodNumber;
59
+ schemaPass: z.ZodNumber;
60
+ factualPass: z.ZodNumber;
61
+ hallucinationFreePass: z.ZodNumber;
62
+ overallPass: z.ZodNumber;
63
+ }, z.core.$strip>;
64
+ }, z.core.$strip>;
65
+ export type JudgeVerdict = z.infer<typeof judgeVerdictSchema>;
66
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/api/schemas/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B;;;;;;GAMG;AACH,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC;;;GAGG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;iBAU3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;;;;iBAMxB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;iBAO7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}