@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.
- package/LICENSE +21 -0
- package/README.md +958 -0
- package/dist/api/errors.d.ts +88 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +164 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/helpers/envelope.d.ts +13 -0
- package/dist/api/helpers/envelope.d.ts.map +1 -0
- package/dist/api/helpers/envelope.js +20 -0
- package/dist/api/helpers/envelope.js.map +1 -0
- package/dist/api/helpers/reply.d.ts +9 -0
- package/dist/api/helpers/reply.d.ts.map +1 -0
- package/dist/api/helpers/reply.js +14 -0
- package/dist/api/helpers/reply.js.map +1 -0
- package/dist/api/plugins/auth.d.ts +27 -0
- package/dist/api/plugins/auth.d.ts.map +1 -0
- package/dist/api/plugins/auth.js +111 -0
- package/dist/api/plugins/auth.js.map +1 -0
- package/dist/api/plugins/error-handler.d.ts +12 -0
- package/dist/api/plugins/error-handler.d.ts.map +1 -0
- package/dist/api/plugins/error-handler.js +72 -0
- package/dist/api/plugins/error-handler.js.map +1 -0
- package/dist/api/plugins/request-context.d.ts +17 -0
- package/dist/api/plugins/request-context.d.ts.map +1 -0
- package/dist/api/plugins/request-context.js +61 -0
- package/dist/api/plugins/request-context.js.map +1 -0
- package/dist/api/routes/health.d.ts +55 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +137 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/plugins-introspection.d.ts +17 -0
- package/dist/api/routes/plugins-introspection.d.ts.map +1 -0
- package/dist/api/routes/plugins-introspection.js +13 -0
- package/dist/api/routes/plugins-introspection.js.map +1 -0
- package/dist/api/schemas/common.d.ts +114 -0
- package/dist/api/schemas/common.d.ts.map +1 -0
- package/dist/api/schemas/common.js +109 -0
- package/dist/api/schemas/common.js.map +1 -0
- package/dist/api/schemas/telemetry.d.ts +66 -0
- package/dist/api/schemas/telemetry.d.ts.map +1 -0
- package/dist/api/schemas/telemetry.js +52 -0
- package/dist/api/schemas/telemetry.js.map +1 -0
- package/dist/cache/keyed-ttl-cache.d.ts +45 -0
- package/dist/cache/keyed-ttl-cache.d.ts.map +1 -0
- package/dist/cache/keyed-ttl-cache.js +69 -0
- package/dist/cache/keyed-ttl-cache.js.map +1 -0
- package/dist/cache/response-cache.d.ts +37 -0
- package/dist/cache/response-cache.d.ts.map +1 -0
- package/dist/cache/response-cache.js +114 -0
- package/dist/cache/response-cache.js.map +1 -0
- package/dist/config.d.ts +258 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/lib/applicant-payload.d.ts +28 -0
- package/dist/lib/applicant-payload.d.ts.map +1 -0
- package/dist/lib/applicant-payload.js +20 -0
- package/dist/lib/applicant-payload.js.map +1 -0
- package/dist/lib/application-address.d.ts +16 -0
- package/dist/lib/application-address.d.ts.map +1 -0
- package/dist/lib/application-address.js +20 -0
- package/dist/lib/application-address.js.map +1 -0
- package/dist/lib/application-answers.d.ts +151 -0
- package/dist/lib/application-answers.d.ts.map +1 -0
- package/dist/lib/application-answers.js +95 -0
- package/dist/lib/application-answers.js.map +1 -0
- package/dist/lib/application-identity.d.ts +18 -0
- package/dist/lib/application-identity.d.ts.map +1 -0
- package/dist/lib/application-identity.js +20 -0
- package/dist/lib/application-identity.js.map +1 -0
- package/dist/lib/application-resume.d.ts +21 -0
- package/dist/lib/application-resume.d.ts.map +1 -0
- package/dist/lib/application-resume.js +23 -0
- package/dist/lib/application-resume.js.map +1 -0
- package/dist/lib/bedrock.d.ts +22 -0
- package/dist/lib/bedrock.d.ts.map +1 -0
- package/dist/lib/bedrock.js +35 -0
- package/dist/lib/bedrock.js.map +1 -0
- package/dist/lib/case-insensitive-headers.d.ts +15 -0
- package/dist/lib/case-insensitive-headers.d.ts.map +1 -0
- package/dist/lib/case-insensitive-headers.js +29 -0
- package/dist/lib/case-insensitive-headers.js.map +1 -0
- package/dist/lib/chromium-client-hints.d.ts +11 -0
- package/dist/lib/chromium-client-hints.d.ts.map +1 -0
- package/dist/lib/chromium-client-hints.js +17 -0
- package/dist/lib/chromium-client-hints.js.map +1 -0
- package/dist/lib/cookie-value.d.ts +8 -0
- package/dist/lib/cookie-value.d.ts.map +1 -0
- package/dist/lib/cookie-value.js +14 -0
- package/dist/lib/cookie-value.js.map +1 -0
- package/dist/lib/datadog.d.ts +8 -0
- package/dist/lib/datadog.d.ts.map +1 -0
- package/dist/lib/datadog.js +27 -0
- package/dist/lib/datadog.js.map +1 -0
- package/dist/lib/dd-metrics.d.ts +28 -0
- package/dist/lib/dd-metrics.d.ts.map +1 -0
- package/dist/lib/dd-metrics.js +62 -0
- package/dist/lib/dd-metrics.js.map +1 -0
- package/dist/lib/dispatch-metrics.d.ts +19 -0
- package/dist/lib/dispatch-metrics.d.ts.map +1 -0
- package/dist/lib/dispatch-metrics.js +65 -0
- package/dist/lib/dispatch-metrics.js.map +1 -0
- package/dist/lib/env.d.ts +37 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +70 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +20 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/http.d.ts +7 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +14 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/job-tracking.d.ts +17 -0
- package/dist/lib/job-tracking.d.ts.map +1 -0
- package/dist/lib/job-tracking.js +19 -0
- package/dist/lib/job-tracking.js.map +1 -0
- package/dist/lib/llm/anthropic-client.d.ts +12 -0
- package/dist/lib/llm/anthropic-client.d.ts.map +1 -0
- package/dist/lib/llm/anthropic-client.js +23 -0
- package/dist/lib/llm/anthropic-client.js.map +1 -0
- package/dist/lib/llm/judge.d.ts +57 -0
- package/dist/lib/llm/judge.d.ts.map +1 -0
- package/dist/lib/llm/judge.js +123 -0
- package/dist/lib/llm/judge.js.map +1 -0
- package/dist/lib/llm/judges/error-messages.d.ts +38 -0
- package/dist/lib/llm/judges/error-messages.d.ts.map +1 -0
- package/dist/lib/llm/judges/error-messages.js +72 -0
- package/dist/lib/llm/judges/error-messages.js.map +1 -0
- package/dist/lib/llm/judges/invalid-fields.d.ts +43 -0
- package/dist/lib/llm/judges/invalid-fields.d.ts.map +1 -0
- package/dist/lib/llm/judges/invalid-fields.js +80 -0
- package/dist/lib/llm/judges/invalid-fields.js.map +1 -0
- package/dist/lib/llm/judges/modal-priority.d.ts +41 -0
- package/dist/lib/llm/judges/modal-priority.d.ts.map +1 -0
- package/dist/lib/llm/judges/modal-priority.js +74 -0
- package/dist/lib/llm/judges/modal-priority.js.map +1 -0
- package/dist/lib/llm/judges/select-option.d.ts +49 -0
- package/dist/lib/llm/judges/select-option.d.ts.map +1 -0
- package/dist/lib/llm/judges/select-option.js +90 -0
- package/dist/lib/llm/judges/select-option.js.map +1 -0
- package/dist/lib/llm/judges/verify-submit.d.ts +68 -0
- package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -0
- package/dist/lib/llm/judges/verify-submit.js +89 -0
- package/dist/lib/llm/judges/verify-submit.js.map +1 -0
- package/dist/lib/llm/schemas.d.ts +220 -0
- package/dist/lib/llm/schemas.d.ts.map +1 -0
- package/dist/lib/llm/schemas.js +239 -0
- package/dist/lib/llm/schemas.js.map +1 -0
- package/dist/lib/logging.d.ts +39 -0
- package/dist/lib/logging.d.ts.map +1 -0
- package/dist/lib/logging.js +219 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/multipart.d.ts +34 -0
- package/dist/lib/multipart.d.ts.map +1 -0
- package/dist/lib/multipart.js +55 -0
- package/dist/lib/multipart.js.map +1 -0
- package/dist/lib/option-matcher.d.ts +15 -0
- package/dist/lib/option-matcher.d.ts.map +1 -0
- package/dist/lib/option-matcher.js +69 -0
- package/dist/lib/option-matcher.js.map +1 -0
- package/dist/lib/phone.d.ts +11 -0
- package/dist/lib/phone.d.ts.map +1 -0
- package/dist/lib/phone.js +17 -0
- package/dist/lib/phone.js.map +1 -0
- package/dist/lib/random.d.ts +22 -0
- package/dist/lib/random.d.ts.map +1 -0
- package/dist/lib/random.js +33 -0
- package/dist/lib/random.js.map +1 -0
- package/dist/lib/statsd.d.ts +11 -0
- package/dist/lib/statsd.d.ts.map +1 -0
- package/dist/lib/statsd.js +68 -0
- package/dist/lib/statsd.js.map +1 -0
- package/dist/lib/telemetry/call-capture.d.ts +89 -0
- package/dist/lib/telemetry/call-capture.d.ts.map +1 -0
- package/dist/lib/telemetry/call-capture.js +190 -0
- package/dist/lib/telemetry/call-capture.js.map +1 -0
- package/dist/lib/telemetry/call-types.d.ts +65 -0
- package/dist/lib/telemetry/call-types.d.ts.map +1 -0
- package/dist/lib/telemetry/call-types.js +68 -0
- package/dist/lib/telemetry/call-types.js.map +1 -0
- package/dist/lib/telemetry/run-state.d.ts +15 -0
- package/dist/lib/telemetry/run-state.d.ts.map +1 -0
- package/dist/lib/telemetry/run-state.js +23 -0
- package/dist/lib/telemetry/run-state.js.map +1 -0
- package/dist/lib/telemetry/s3-sink.d.ts +48 -0
- package/dist/lib/telemetry/s3-sink.d.ts.map +1 -0
- package/dist/lib/telemetry/s3-sink.js +229 -0
- package/dist/lib/telemetry/s3-sink.js.map +1 -0
- package/dist/lib/telemetry/submission-capture.d.ts +45 -0
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -0
- package/dist/lib/telemetry/submission-capture.js +57 -0
- package/dist/lib/telemetry/submission-capture.js.map +1 -0
- package/dist/lib/telemetry/telemetry-paths.d.ts +59 -0
- package/dist/lib/telemetry/telemetry-paths.d.ts.map +1 -0
- package/dist/lib/telemetry/telemetry-paths.js +103 -0
- package/dist/lib/telemetry/telemetry-paths.js.map +1 -0
- package/dist/lib/tracking-click.d.ts +20 -0
- package/dist/lib/tracking-click.d.ts.map +1 -0
- package/dist/lib/tracking-click.js +75 -0
- package/dist/lib/tracking-click.js.map +1 -0
- package/dist/lib/url-capture.d.ts +8 -0
- package/dist/lib/url-capture.d.ts.map +1 -0
- package/dist/lib/url-capture.js +17 -0
- package/dist/lib/url-capture.js.map +1 -0
- package/dist/lib/us-states.d.ts +20 -0
- package/dist/lib/us-states.d.ts.map +1 -0
- package/dist/lib/us-states.js +86 -0
- package/dist/lib/us-states.js.map +1 -0
- package/dist/lib/zod-multipart.d.ts +18 -0
- package/dist/lib/zod-multipart.d.ts.map +1 -0
- package/dist/lib/zod-multipart.js +35 -0
- package/dist/lib/zod-multipart.js.map +1 -0
- package/dist/plugins/config-plugin.d.ts +77 -0
- package/dist/plugins/config-plugin.d.ts.map +1 -0
- package/dist/plugins/config-plugin.js +216 -0
- package/dist/plugins/config-plugin.js.map +1 -0
- package/dist/plugins/discover.d.ts +72 -0
- package/dist/plugins/discover.d.ts.map +1 -0
- package/dist/plugins/discover.js +265 -0
- package/dist/plugins/discover.js.map +1 -0
- package/dist/plugins/json-schema-to-zod.d.ts +47 -0
- package/dist/plugins/json-schema-to-zod.d.ts.map +1 -0
- package/dist/plugins/json-schema-to-zod.js +85 -0
- package/dist/plugins/json-schema-to-zod.js.map +1 -0
- package/dist/plugins/loader.d.ts +34 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +348 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/plugin-api-version.d.ts +8 -0
- package/dist/plugins/plugin-api-version.d.ts.map +1 -0
- package/dist/plugins/plugin-api-version.js +11 -0
- package/dist/plugins/plugin-api-version.js.map +1 -0
- package/dist/plugins/plugin-manifest-envelope.d.ts +16 -0
- package/dist/plugins/plugin-manifest-envelope.d.ts.map +1 -0
- package/dist/plugins/plugin-manifest-envelope.js +19 -0
- package/dist/plugins/plugin-manifest-envelope.js.map +1 -0
- package/dist/scraper/behavioral-signals.d.ts +16 -0
- package/dist/scraper/behavioral-signals.d.ts.map +1 -0
- package/dist/scraper/behavioral-signals.js +30 -0
- package/dist/scraper/behavioral-signals.js.map +1 -0
- package/dist/scraper/errors.d.ts +193 -0
- package/dist/scraper/errors.d.ts.map +1 -0
- package/dist/scraper/errors.js +226 -0
- package/dist/scraper/errors.js.map +1 -0
- package/dist/scraper/fixtures.d.ts +23 -0
- package/dist/scraper/fixtures.d.ts.map +1 -0
- package/dist/scraper/fixtures.js +48 -0
- package/dist/scraper/fixtures.js.map +1 -0
- package/dist/scraper/flow-runner.d.ts +1319 -0
- package/dist/scraper/flow-runner.d.ts.map +1 -0
- package/dist/scraper/flow-runner.js +5637 -0
- package/dist/scraper/flow-runner.js.map +1 -0
- package/dist/scraper/graphql-client.d.ts +30 -0
- package/dist/scraper/graphql-client.d.ts.map +1 -0
- package/dist/scraper/graphql-client.js +14 -0
- package/dist/scraper/graphql-client.js.map +1 -0
- package/dist/scraper/http-client.d.ts +75 -0
- package/dist/scraper/http-client.d.ts.map +1 -0
- package/dist/scraper/http-client.js +189 -0
- package/dist/scraper/http-client.js.map +1 -0
- package/dist/scraper/http-status-classifier.d.ts +12 -0
- package/dist/scraper/http-status-classifier.d.ts.map +1 -0
- package/dist/scraper/http-status-classifier.js +29 -0
- package/dist/scraper/http-status-classifier.js.map +1 -0
- package/dist/scraper/metrics.d.ts +50 -0
- package/dist/scraper/metrics.d.ts.map +1 -0
- package/dist/scraper/metrics.js +85 -0
- package/dist/scraper/metrics.js.map +1 -0
- package/dist/scraper/navigate.d.ts +20 -0
- package/dist/scraper/navigate.d.ts.map +1 -0
- package/dist/scraper/navigate.js +30 -0
- package/dist/scraper/navigate.js.map +1 -0
- package/dist/scraper/oracle-sentinels.d.ts +22 -0
- package/dist/scraper/oracle-sentinels.d.ts.map +1 -0
- package/dist/scraper/oracle-sentinels.js +40 -0
- package/dist/scraper/oracle-sentinels.js.map +1 -0
- package/dist/scraper/parse-json-response.d.ts +16 -0
- package/dist/scraper/parse-json-response.d.ts.map +1 -0
- package/dist/scraper/parse-json-response.js +37 -0
- package/dist/scraper/parse-json-response.js.map +1 -0
- package/dist/scraper/pool.d.ts +37 -0
- package/dist/scraper/pool.d.ts.map +1 -0
- package/dist/scraper/pool.js +105 -0
- package/dist/scraper/pool.js.map +1 -0
- package/dist/scraper/rate-limited-json-client.d.ts +35 -0
- package/dist/scraper/rate-limited-json-client.d.ts.map +1 -0
- package/dist/scraper/rate-limited-json-client.js +29 -0
- package/dist/scraper/rate-limited-json-client.js.map +1 -0
- package/dist/scraper/raw-fetch.d.ts +49 -0
- package/dist/scraper/raw-fetch.d.ts.map +1 -0
- package/dist/scraper/raw-fetch.js +40 -0
- package/dist/scraper/raw-fetch.js.map +1 -0
- package/dist/scraper/require-response-field.d.ts +23 -0
- package/dist/scraper/require-response-field.d.ts.map +1 -0
- package/dist/scraper/require-response-field.js +42 -0
- package/dist/scraper/require-response-field.js.map +1 -0
- package/dist/scraper/retry.d.ts +33 -0
- package/dist/scraper/retry.d.ts.map +1 -0
- package/dist/scraper/retry.js +122 -0
- package/dist/scraper/retry.js.map +1 -0
- package/dist/scraper/session-browserbase.d.ts +35 -0
- package/dist/scraper/session-browserbase.d.ts.map +1 -0
- package/dist/scraper/session-browserbase.js +198 -0
- package/dist/scraper/session-browserbase.js.map +1 -0
- package/dist/scraper/session-shared.d.ts +29 -0
- package/dist/scraper/session-shared.d.ts.map +1 -0
- package/dist/scraper/session-shared.js +35 -0
- package/dist/scraper/session-shared.js.map +1 -0
- package/dist/scraper/session-steel.d.ts +31 -0
- package/dist/scraper/session-steel.d.ts.map +1 -0
- package/dist/scraper/session-steel.js +140 -0
- package/dist/scraper/session-steel.js.map +1 -0
- package/dist/scraper/session-warmup.d.ts +31 -0
- package/dist/scraper/session-warmup.d.ts.map +1 -0
- package/dist/scraper/session-warmup.js +46 -0
- package/dist/scraper/session-warmup.js.map +1 -0
- package/dist/scraper/session.d.ts +21 -0
- package/dist/scraper/session.d.ts.map +1 -0
- package/dist/scraper/session.js +28 -0
- package/dist/scraper/session.js.map +1 -0
- package/dist/scraper/stagehand-guard.d.ts +128 -0
- package/dist/scraper/stagehand-guard.d.ts.map +1 -0
- package/dist/scraper/stagehand-guard.js +337 -0
- package/dist/scraper/stagehand-guard.js.map +1 -0
- package/dist/scraper/throttle.d.ts +21 -0
- package/dist/scraper/throttle.d.ts.map +1 -0
- package/dist/scraper/throttle.js +45 -0
- package/dist/scraper/throttle.js.map +1 -0
- package/dist/scripts/hca-inbox-poll.d.ts +19 -0
- package/dist/scripts/hca-inbox-poll.d.ts.map +1 -0
- package/dist/scripts/hca-inbox-poll.js +151 -0
- package/dist/scripts/hca-inbox-poll.js.map +1 -0
- package/dist/scripts/judge-llm-batch.d.ts +98 -0
- package/dist/scripts/judge-llm-batch.d.ts.map +1 -0
- package/dist/scripts/judge-llm-batch.js +350 -0
- package/dist/scripts/judge-llm-batch.js.map +1 -0
- package/dist/scripts/llm-heal.d.ts +165 -0
- package/dist/scripts/llm-heal.d.ts.map +1 -0
- package/dist/scripts/llm-heal.js +595 -0
- package/dist/scripts/llm-heal.js.map +1 -0
- package/dist/scripts/migrate-telemetry-dir-names.d.ts +57 -0
- package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +1 -0
- package/dist/scripts/migrate-telemetry-dir-names.js +156 -0
- package/dist/scripts/migrate-telemetry-dir-names.js.map +1 -0
- package/dist/scripts/probe-setinputfiles.d.ts +28 -0
- package/dist/scripts/probe-setinputfiles.d.ts.map +1 -0
- package/dist/scripts/probe-setinputfiles.js +95 -0
- package/dist/scripts/probe-setinputfiles.js.map +1 -0
- package/dist/scripts/recon-browser.d.ts +304 -0
- package/dist/scripts/recon-browser.d.ts.map +1 -0
- package/dist/scripts/recon-browser.js +1833 -0
- package/dist/scripts/recon-browser.js.map +1 -0
- package/dist/scripts/recon-generate.d.ts +182 -0
- package/dist/scripts/recon-generate.d.ts.map +1 -0
- package/dist/scripts/recon-generate.js +2572 -0
- package/dist/scripts/recon-generate.js.map +1 -0
- package/dist/scripts/recon-heal.d.ts +176 -0
- package/dist/scripts/recon-heal.d.ts.map +1 -0
- package/dist/scripts/recon-heal.js +584 -0
- package/dist/scripts/recon-heal.js.map +1 -0
- package/dist/scripts/recon-http.d.ts +19 -0
- package/dist/scripts/recon-http.d.ts.map +1 -0
- package/dist/scripts/recon-http.js +377 -0
- package/dist/scripts/recon-http.js.map +1 -0
- package/dist/scripts/recon-replay-jobs.d.ts +21 -0
- package/dist/scripts/recon-replay-jobs.d.ts.map +1 -0
- package/dist/scripts/recon-replay-jobs.js +221 -0
- package/dist/scripts/recon-replay-jobs.js.map +1 -0
- package/dist/scripts/recon-shared.d.ts +52 -0
- package/dist/scripts/recon-shared.d.ts.map +1 -0
- package/dist/scripts/recon-shared.js +68 -0
- package/dist/scripts/recon-shared.js.map +1 -0
- package/dist/scripts/recon-summarize.d.ts +15 -0
- package/dist/scripts/recon-summarize.d.ts.map +1 -0
- package/dist/scripts/recon-summarize.js +233 -0
- package/dist/scripts/recon-summarize.js.map +1 -0
- package/dist/scripts/smoke-test.d.ts +22 -0
- package/dist/scripts/smoke-test.d.ts.map +1 -0
- package/dist/scripts/smoke-test.js +236 -0
- package/dist/scripts/smoke-test.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +189 -0
- package/dist/server.js.map +1 -0
- package/dist/site-plugin.d.ts +226 -0
- package/dist/site-plugin.d.ts.map +1 -0
- package/dist/site-plugin.js +13 -0
- package/dist/site-plugin.js.map +1 -0
- package/dist/testing/answers-fixture.d.ts +13 -0
- package/dist/testing/answers-fixture.d.ts.map +1 -0
- package/dist/testing/answers-fixture.js +37 -0
- package/dist/testing/answers-fixture.js.map +1 -0
- package/dist/testing/batch-email-confirmation.d.ts +58 -0
- package/dist/testing/batch-email-confirmation.d.ts.map +1 -0
- package/dist/testing/batch-email-confirmation.js +62 -0
- package/dist/testing/batch-email-confirmation.js.map +1 -0
- package/dist/testing/batch-report.d.ts +33 -0
- package/dist/testing/batch-report.d.ts.map +1 -0
- package/dist/testing/batch-report.js +30 -0
- package/dist/testing/batch-report.js.map +1 -0
- package/dist/testing/contract-parity-suite.d.ts +55 -0
- package/dist/testing/contract-parity-suite.d.ts.map +1 -0
- package/dist/testing/contract-parity-suite.js +39 -0
- package/dist/testing/contract-parity-suite.js.map +1 -0
- package/dist/testing/coverage-guard-suite.d.ts +46 -0
- package/dist/testing/coverage-guard-suite.d.ts.map +1 -0
- package/dist/testing/coverage-guard-suite.js +39 -0
- package/dist/testing/coverage-guard-suite.js.map +1 -0
- package/dist/testing/fixtures/resume.pdf +54 -0
- package/dist/testing/integration-runner.d.ts +62 -0
- package/dist/testing/integration-runner.d.ts.map +1 -0
- package/dist/testing/integration-runner.js +46 -0
- package/dist/testing/integration-runner.js.map +1 -0
- package/dist/testing/mock-fetch-response.d.ts +7 -0
- package/dist/testing/mock-fetch-response.d.ts.map +1 -0
- package/dist/testing/mock-fetch-response.js +16 -0
- package/dist/testing/mock-fetch-response.js.map +1 -0
- package/dist/testing/persona-fixture.d.ts +77 -0
- package/dist/testing/persona-fixture.d.ts.map +1 -0
- package/dist/testing/persona-fixture.js +83 -0
- package/dist/testing/persona-fixture.js.map +1 -0
- package/dist/testing/replay-integration-suite.d.ts +50 -0
- package/dist/testing/replay-integration-suite.d.ts.map +1 -0
- package/dist/testing/replay-integration-suite.js +45 -0
- package/dist/testing/replay-integration-suite.js.map +1 -0
- package/dist/testing/resume-fixture.d.ts +39 -0
- package/dist/testing/resume-fixture.d.ts.map +1 -0
- package/dist/testing/resume-fixture.js +38 -0
- package/dist/testing/resume-fixture.js.map +1 -0
- package/dist/testmail/client.d.ts +61 -0
- package/dist/testmail/client.d.ts.map +1 -0
- package/dist/testmail/client.js +190 -0
- package/dist/testmail/client.js.map +1 -0
- package/dist/testmail/errors.d.ts +18 -0
- package/dist/testmail/errors.d.ts.map +1 -0
- package/dist/testmail/errors.js +29 -0
- package/dist/testmail/errors.js.map +1 -0
- package/dist/types/dispatch-metrics.d.ts +46 -0
- package/dist/types/dispatch-metrics.d.ts.map +1 -0
- package/dist/types/dispatch-metrics.js +25 -0
- package/dist/types/dispatch-metrics.js.map +1 -0
- package/dist/types/logging.d.ts +11 -0
- package/dist/types/logging.d.ts.map +1 -0
- package/dist/types/logging.js +3 -0
- package/dist/types/logging.js.map +1 -0
- 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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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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"}
|