recker 1.0.20-next.de24f7d → 1.0.20-next.e194d90
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/README.md +31 -0
- package/dist/ai/adaptive-timeout.d.ts +0 -1
- package/dist/ai/client.d.ts +0 -1
- package/dist/ai/client.js +6 -0
- package/dist/ai/index.d.ts +3 -1
- package/dist/ai/index.js +3 -0
- package/dist/ai/providers/anthropic.d.ts +0 -1
- package/dist/ai/providers/base.d.ts +0 -1
- package/dist/ai/providers/google.d.ts +59 -0
- package/dist/ai/providers/google.js +305 -0
- package/dist/ai/providers/index.d.ts +4 -1
- package/dist/ai/providers/index.js +2 -0
- package/dist/ai/providers/ollama.d.ts +44 -0
- package/dist/ai/providers/ollama.js +240 -0
- package/dist/ai/providers/openai.d.ts +0 -1
- package/dist/ai/rate-limiter.d.ts +0 -1
- package/dist/ai/vector/index.d.ts +2 -0
- package/dist/ai/vector/index.js +2 -0
- package/dist/ai/vector/similarity.d.ts +2 -0
- package/dist/ai/vector/similarity.js +27 -0
- package/dist/ai/vector/store.d.ts +27 -0
- package/dist/ai/vector/store.js +82 -0
- package/dist/bench/generator.d.ts +0 -1
- package/dist/bench/stats.d.ts +0 -1
- package/dist/cache/basic-file-storage.d.ts +12 -0
- package/dist/cache/basic-file-storage.js +50 -0
- package/dist/cache/file-storage.d.ts +25 -11
- package/dist/cache/file-storage.js +175 -30
- package/dist/cache/memory-limits.d.ts +0 -1
- package/dist/cache/memory-storage.d.ts +0 -1
- package/dist/cache/redis-storage.d.ts +0 -1
- package/dist/cli/handler.d.ts +2 -1
- package/dist/cli/handler.js +36 -5
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +559 -6
- package/dist/cli/presets.d.ts +0 -1
- package/dist/cli/tui/ai-chat.d.ts +0 -1
- package/dist/cli/tui/load-dashboard.d.ts +0 -1
- package/dist/cli/tui/scroll-buffer.d.ts +0 -1
- package/dist/cli/tui/search-panel.d.ts +0 -1
- package/dist/cli/tui/shell-search.d.ts +0 -1
- package/dist/cli/tui/shell.d.ts +0 -1
- package/dist/cli/tui/shell.js +1 -1
- package/dist/cli/tui/websocket.d.ts +0 -1
- package/dist/constants/http-status.d.ts +0 -1
- package/dist/constants.d.ts +0 -1
- package/dist/contract/index.d.ts +0 -1
- package/dist/cookies/memory-cookie-jar.d.ts +0 -1
- package/dist/core/client.d.ts +0 -1
- package/dist/core/client.js +1 -1
- package/dist/core/errors.d.ts +0 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/request-promise.d.ts +0 -1
- package/dist/core/request.d.ts +0 -1
- package/dist/core/response.d.ts +0 -1
- package/dist/dns/index.d.ts +0 -1
- package/dist/dns/propagation.d.ts +0 -1
- package/dist/events/request-events.d.ts +0 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/mcp/client.d.ts +0 -1
- package/dist/mcp/contract.d.ts +0 -1
- package/dist/mcp/embeddings-loader.d.ts +0 -1
- package/dist/mcp/geoip-loader.d.ts +0 -1
- package/dist/mcp/index.d.ts +0 -1
- package/dist/mcp/ip-intel.d.ts +0 -1
- package/dist/mcp/search/hybrid-search.d.ts +0 -1
- package/dist/mcp/search/index.d.ts +0 -1
- package/dist/mcp/search/math.d.ts +0 -1
- package/dist/mcp/search/types.d.ts +0 -1
- package/dist/mcp/server.d.ts +6 -2
- package/dist/mcp/server.js +193 -151
- package/dist/mcp/tools/loader.d.ts +2 -0
- package/dist/mcp/tools/loader.js +41 -0
- package/dist/mcp/tools/network.d.ts +3 -0
- package/dist/mcp/tools/network.js +267 -0
- package/dist/mcp/tools/registry.d.ts +17 -0
- package/dist/mcp/tools/registry.js +37 -0
- package/dist/mcp/types.d.ts +0 -1
- package/dist/plugins/auth/api-key.d.ts +8 -0
- package/dist/plugins/auth/api-key.js +27 -0
- package/dist/plugins/auth/auth0.d.ts +33 -0
- package/dist/plugins/auth/auth0.js +94 -0
- package/dist/plugins/auth/aws-sigv4.d.ts +10 -0
- package/dist/plugins/auth/aws-sigv4.js +88 -0
- package/dist/plugins/auth/azure-ad.d.ts +48 -0
- package/dist/plugins/auth/azure-ad.js +152 -0
- package/dist/plugins/auth/basic.d.ts +7 -0
- package/dist/plugins/auth/basic.js +13 -0
- package/dist/plugins/auth/bearer.d.ts +8 -0
- package/dist/plugins/auth/bearer.js +17 -0
- package/dist/plugins/auth/cognito.d.ts +45 -0
- package/dist/plugins/auth/cognito.js +208 -0
- package/dist/plugins/auth/digest.d.ts +8 -0
- package/dist/plugins/auth/digest.js +100 -0
- package/dist/plugins/auth/firebase.d.ts +32 -0
- package/dist/plugins/auth/firebase.js +195 -0
- package/dist/plugins/auth/github-app.d.ts +36 -0
- package/dist/plugins/auth/github-app.js +170 -0
- package/dist/plugins/auth/google-service-account.d.ts +49 -0
- package/dist/plugins/auth/google-service-account.js +172 -0
- package/dist/plugins/auth/index.d.ts +15 -0
- package/dist/plugins/auth/index.js +15 -0
- package/dist/plugins/auth/mtls.d.ts +37 -0
- package/dist/plugins/auth/mtls.js +140 -0
- package/dist/plugins/auth/oauth2.d.ts +8 -0
- package/dist/plugins/auth/oauth2.js +26 -0
- package/dist/plugins/auth/oidc.d.ts +55 -0
- package/dist/plugins/auth/oidc.js +222 -0
- package/dist/plugins/auth/okta.d.ts +47 -0
- package/dist/plugins/auth/okta.js +157 -0
- package/dist/plugins/auth.d.ts +1 -45
- package/dist/plugins/auth.js +1 -268
- package/dist/plugins/cache.d.ts +0 -1
- package/dist/plugins/cache.js +1 -1
- package/dist/plugins/certificate-pinning.d.ts +59 -0
- package/dist/plugins/certificate-pinning.js +236 -0
- package/dist/plugins/circuit-breaker.d.ts +0 -1
- package/dist/plugins/compression.d.ts +0 -1
- package/dist/plugins/cookie-jar.d.ts +0 -1
- package/dist/plugins/dedup.d.ts +0 -1
- package/dist/plugins/graphql.d.ts +0 -1
- package/dist/plugins/grpc-web.d.ts +0 -1
- package/dist/plugins/har-player.d.ts +0 -1
- package/dist/plugins/har-recorder.d.ts +0 -1
- package/dist/plugins/hls.d.ts +0 -1
- package/dist/plugins/http2-push.d.ts +0 -1
- package/dist/plugins/http3.d.ts +0 -1
- package/dist/plugins/index.d.ts +27 -0
- package/dist/plugins/index.js +27 -0
- package/dist/plugins/interface-rotator.d.ts +0 -1
- package/dist/plugins/jsonrpc.d.ts +0 -1
- package/dist/plugins/logger.d.ts +0 -1
- package/dist/plugins/odata.d.ts +0 -1
- package/dist/plugins/pagination.d.ts +0 -1
- package/dist/plugins/proxy-rotator.d.ts +0 -1
- package/dist/plugins/rate-limit.d.ts +15 -0
- package/dist/plugins/rate-limit.js +162 -0
- package/dist/plugins/retry.d.ts +0 -1
- package/dist/plugins/retry.js +2 -2
- package/dist/plugins/scrape.d.ts +0 -1
- package/dist/plugins/server-timing.d.ts +0 -1
- package/dist/plugins/soap.d.ts +0 -1
- package/dist/plugins/user-agent.d.ts +0 -1
- package/dist/plugins/xml.d.ts +0 -1
- package/dist/plugins/xsrf.d.ts +0 -1
- package/dist/presets/anthropic.d.ts +0 -1
- package/dist/presets/aws.d.ts +0 -1
- package/dist/presets/azure-openai.d.ts +0 -1
- package/dist/presets/azure.d.ts +0 -1
- package/dist/presets/cloudflare.d.ts +0 -1
- package/dist/presets/cohere.d.ts +0 -1
- package/dist/presets/deepseek.d.ts +0 -1
- package/dist/presets/digitalocean.d.ts +0 -1
- package/dist/presets/discord.d.ts +0 -1
- package/dist/presets/fireworks.d.ts +0 -1
- package/dist/presets/gcp.d.ts +0 -1
- package/dist/presets/gemini.d.ts +0 -1
- package/dist/presets/github.d.ts +0 -1
- package/dist/presets/gitlab.d.ts +0 -1
- package/dist/presets/groq.d.ts +0 -1
- package/dist/presets/huggingface.d.ts +0 -1
- package/dist/presets/index.d.ts +0 -1
- package/dist/presets/linear.d.ts +0 -1
- package/dist/presets/mailgun.d.ts +0 -1
- package/dist/presets/meta.d.ts +0 -1
- package/dist/presets/mistral.d.ts +0 -1
- package/dist/presets/notion.d.ts +0 -1
- package/dist/presets/openai.d.ts +0 -1
- package/dist/presets/oracle.d.ts +0 -1
- package/dist/presets/perplexity.d.ts +0 -1
- package/dist/presets/registry.d.ts +0 -1
- package/dist/presets/replicate.d.ts +0 -1
- package/dist/presets/sinch.d.ts +0 -1
- package/dist/presets/slack.d.ts +0 -1
- package/dist/presets/stripe.d.ts +0 -1
- package/dist/presets/supabase.d.ts +0 -1
- package/dist/presets/tiktok.d.ts +0 -1
- package/dist/presets/together.d.ts +0 -1
- package/dist/presets/twilio.d.ts +0 -1
- package/dist/presets/vercel.d.ts +0 -1
- package/dist/presets/vultr.d.ts +0 -1
- package/dist/presets/xai.d.ts +0 -1
- package/dist/presets/youtube.d.ts +0 -1
- package/dist/protocols/ftp.d.ts +0 -1
- package/dist/protocols/index.d.ts +0 -1
- package/dist/protocols/sftp.d.ts +0 -1
- package/dist/protocols/telnet.d.ts +0 -1
- package/dist/recker.d.ts +0 -1
- package/dist/runner/request-runner.d.ts +0 -1
- package/dist/scrape/document.d.ts +0 -1
- package/dist/scrape/element.d.ts +0 -1
- package/dist/scrape/extractors.d.ts +0 -1
- package/dist/scrape/index.d.ts +0 -1
- package/dist/scrape/types.d.ts +0 -1
- package/dist/testing/index.d.ts +16 -1
- package/dist/testing/index.js +8 -0
- package/dist/testing/mock-dns-server.d.ts +69 -0
- package/dist/testing/mock-dns-server.js +269 -0
- package/dist/testing/mock-ftp-server.d.ts +89 -0
- package/dist/testing/mock-ftp-server.js +562 -0
- package/dist/testing/mock-hls-server.d.ts +80 -0
- package/dist/testing/mock-hls-server.js +381 -0
- package/dist/testing/mock-http-server.d.ts +99 -0
- package/dist/testing/mock-http-server.js +298 -0
- package/dist/testing/mock-sse-server.d.ts +76 -0
- package/dist/testing/mock-sse-server.js +291 -0
- package/dist/testing/mock-telnet-server.d.ts +59 -0
- package/dist/testing/mock-telnet-server.js +273 -0
- package/dist/testing/mock-udp-server.d.ts +0 -1
- package/dist/testing/mock-websocket-server.d.ts +77 -0
- package/dist/testing/mock-websocket-server.js +316 -0
- package/dist/testing/mock-whois-server.d.ts +56 -0
- package/dist/testing/mock-whois-server.js +234 -0
- package/dist/testing/mock.d.ts +0 -1
- package/dist/transport/base-udp.d.ts +0 -1
- package/dist/transport/fetch.d.ts +0 -1
- package/dist/transport/udp-response.d.ts +0 -1
- package/dist/transport/udp.d.ts +0 -1
- package/dist/transport/undici.d.ts +0 -1
- package/dist/transport/undici.js +1 -1
- package/dist/types/ai.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/logger.d.ts +0 -1
- package/dist/types/udp.d.ts +0 -1
- package/dist/udp/index.d.ts +0 -1
- package/dist/utils/agent-manager.d.ts +0 -1
- package/dist/utils/body.d.ts +0 -1
- package/dist/utils/cert.d.ts +0 -1
- package/dist/utils/charset.d.ts +0 -1
- package/dist/utils/chart.d.ts +0 -1
- package/dist/utils/client-pool.d.ts +0 -1
- package/dist/utils/colors.d.ts +0 -1
- package/dist/utils/concurrency.d.ts +0 -1
- package/dist/utils/dns-toolkit.d.ts +0 -1
- package/dist/utils/dns-toolkit.js +1 -1
- package/dist/utils/dns.d.ts +0 -1
- package/dist/utils/dns.js +2 -2
- package/dist/utils/doh.d.ts +0 -1
- package/dist/utils/download.d.ts +0 -1
- package/dist/utils/env-proxy.d.ts +0 -1
- package/dist/utils/header-parser.d.ts +0 -1
- package/dist/utils/html-cleaner.d.ts +0 -1
- package/dist/utils/link-header.d.ts +0 -1
- package/dist/utils/optional-require.d.ts +0 -1
- package/dist/utils/optional-require.js +1 -1
- package/dist/utils/progress.d.ts +0 -1
- package/dist/utils/rdap.d.ts +0 -1
- package/dist/utils/request-pool.d.ts +0 -1
- package/dist/utils/security-grader.d.ts +0 -1
- package/dist/utils/sparkline.d.ts +0 -1
- package/dist/utils/sse.d.ts +0 -1
- package/dist/utils/streaming.d.ts +0 -1
- package/dist/utils/system-metrics.d.ts +0 -1
- package/dist/utils/tls-inspector.d.ts +0 -1
- package/dist/utils/try-fn.d.ts +0 -1
- package/dist/utils/upload.d.ts +0 -1
- package/dist/utils/user-agent.d.ts +0 -1
- package/dist/utils/whois.d.ts +0 -1
- package/dist/webrtc/index.d.ts +0 -1
- package/dist/webrtc/index.js +1 -1
- package/dist/websocket/client.d.ts +0 -1
- package/package.json +12 -3
- package/dist/ai/adaptive-timeout.d.ts.map +0 -1
- package/dist/ai/client.d.ts.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/providers/anthropic.d.ts.map +0 -1
- package/dist/ai/providers/base.d.ts.map +0 -1
- package/dist/ai/providers/index.d.ts.map +0 -1
- package/dist/ai/providers/openai.d.ts.map +0 -1
- package/dist/ai/rate-limiter.d.ts.map +0 -1
- package/dist/bench/generator.d.ts.map +0 -1
- package/dist/bench/stats.d.ts.map +0 -1
- package/dist/cache/file-storage.d.ts.map +0 -1
- package/dist/cache/memory-limits.d.ts.map +0 -1
- package/dist/cache/memory-storage.d.ts.map +0 -1
- package/dist/cache/redis-storage.d.ts.map +0 -1
- package/dist/cli/handler.d.ts.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/presets.d.ts.map +0 -1
- package/dist/cli/tui/ai-chat.d.ts.map +0 -1
- package/dist/cli/tui/load-dashboard.d.ts.map +0 -1
- package/dist/cli/tui/scroll-buffer.d.ts.map +0 -1
- package/dist/cli/tui/search-panel.d.ts.map +0 -1
- package/dist/cli/tui/shell-search.d.ts.map +0 -1
- package/dist/cli/tui/shell.d.ts.map +0 -1
- package/dist/cli/tui/websocket.d.ts.map +0 -1
- package/dist/constants/http-status.d.ts.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/contract/index.d.ts.map +0 -1
- package/dist/cookies/memory-cookie-jar.d.ts.map +0 -1
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/request-promise.d.ts.map +0 -1
- package/dist/core/request.d.ts.map +0 -1
- package/dist/core/response.d.ts.map +0 -1
- package/dist/dns/index.d.ts.map +0 -1
- package/dist/dns/propagation.d.ts.map +0 -1
- package/dist/events/request-events.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/client.d.ts.map +0 -1
- package/dist/mcp/contract.d.ts.map +0 -1
- package/dist/mcp/embeddings-loader.d.ts.map +0 -1
- package/dist/mcp/geoip-loader.d.ts.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/ip-intel.d.ts.map +0 -1
- package/dist/mcp/search/hybrid-search.d.ts.map +0 -1
- package/dist/mcp/search/index.d.ts.map +0 -1
- package/dist/mcp/search/math.d.ts.map +0 -1
- package/dist/mcp/search/types.d.ts.map +0 -1
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/plugins/auth.d.ts.map +0 -1
- package/dist/plugins/cache.d.ts.map +0 -1
- package/dist/plugins/circuit-breaker.d.ts.map +0 -1
- package/dist/plugins/compression.d.ts.map +0 -1
- package/dist/plugins/cookie-jar.d.ts.map +0 -1
- package/dist/plugins/dedup.d.ts.map +0 -1
- package/dist/plugins/graphql.d.ts.map +0 -1
- package/dist/plugins/grpc-web.d.ts.map +0 -1
- package/dist/plugins/har-player.d.ts.map +0 -1
- package/dist/plugins/har-recorder.d.ts.map +0 -1
- package/dist/plugins/hls.d.ts.map +0 -1
- package/dist/plugins/http2-push.d.ts.map +0 -1
- package/dist/plugins/http3.d.ts.map +0 -1
- package/dist/plugins/interface-rotator.d.ts.map +0 -1
- package/dist/plugins/jsonrpc.d.ts.map +0 -1
- package/dist/plugins/logger.d.ts.map +0 -1
- package/dist/plugins/odata.d.ts.map +0 -1
- package/dist/plugins/pagination.d.ts.map +0 -1
- package/dist/plugins/proxy-rotator.d.ts.map +0 -1
- package/dist/plugins/retry.d.ts.map +0 -1
- package/dist/plugins/scrape.d.ts.map +0 -1
- package/dist/plugins/server-timing.d.ts.map +0 -1
- package/dist/plugins/soap.d.ts.map +0 -1
- package/dist/plugins/user-agent.d.ts.map +0 -1
- package/dist/plugins/xml.d.ts.map +0 -1
- package/dist/plugins/xsrf.d.ts.map +0 -1
- package/dist/presets/anthropic.d.ts.map +0 -1
- package/dist/presets/aws.d.ts.map +0 -1
- package/dist/presets/azure-openai.d.ts.map +0 -1
- package/dist/presets/azure.d.ts.map +0 -1
- package/dist/presets/cloudflare.d.ts.map +0 -1
- package/dist/presets/cohere.d.ts.map +0 -1
- package/dist/presets/deepseek.d.ts.map +0 -1
- package/dist/presets/digitalocean.d.ts.map +0 -1
- package/dist/presets/discord.d.ts.map +0 -1
- package/dist/presets/fireworks.d.ts.map +0 -1
- package/dist/presets/gcp.d.ts.map +0 -1
- package/dist/presets/gemini.d.ts.map +0 -1
- package/dist/presets/github.d.ts.map +0 -1
- package/dist/presets/gitlab.d.ts.map +0 -1
- package/dist/presets/groq.d.ts.map +0 -1
- package/dist/presets/huggingface.d.ts.map +0 -1
- package/dist/presets/index.d.ts.map +0 -1
- package/dist/presets/linear.d.ts.map +0 -1
- package/dist/presets/mailgun.d.ts.map +0 -1
- package/dist/presets/meta.d.ts.map +0 -1
- package/dist/presets/mistral.d.ts.map +0 -1
- package/dist/presets/notion.d.ts.map +0 -1
- package/dist/presets/openai.d.ts.map +0 -1
- package/dist/presets/oracle.d.ts.map +0 -1
- package/dist/presets/perplexity.d.ts.map +0 -1
- package/dist/presets/registry.d.ts.map +0 -1
- package/dist/presets/replicate.d.ts.map +0 -1
- package/dist/presets/sinch.d.ts.map +0 -1
- package/dist/presets/slack.d.ts.map +0 -1
- package/dist/presets/stripe.d.ts.map +0 -1
- package/dist/presets/supabase.d.ts.map +0 -1
- package/dist/presets/tiktok.d.ts.map +0 -1
- package/dist/presets/together.d.ts.map +0 -1
- package/dist/presets/twilio.d.ts.map +0 -1
- package/dist/presets/vercel.d.ts.map +0 -1
- package/dist/presets/vultr.d.ts.map +0 -1
- package/dist/presets/xai.d.ts.map +0 -1
- package/dist/presets/youtube.d.ts.map +0 -1
- package/dist/protocols/ftp.d.ts.map +0 -1
- package/dist/protocols/index.d.ts.map +0 -1
- package/dist/protocols/sftp.d.ts.map +0 -1
- package/dist/protocols/telnet.d.ts.map +0 -1
- package/dist/recker.d.ts.map +0 -1
- package/dist/runner/request-runner.d.ts.map +0 -1
- package/dist/scrape/document.d.ts.map +0 -1
- package/dist/scrape/element.d.ts.map +0 -1
- package/dist/scrape/extractors.d.ts.map +0 -1
- package/dist/scrape/index.d.ts.map +0 -1
- package/dist/scrape/types.d.ts.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/mock-udp-server.d.ts.map +0 -1
- package/dist/testing/mock.d.ts.map +0 -1
- package/dist/transport/base-udp.d.ts.map +0 -1
- package/dist/transport/fetch.d.ts.map +0 -1
- package/dist/transport/udp-response.d.ts.map +0 -1
- package/dist/transport/udp.d.ts.map +0 -1
- package/dist/transport/undici.d.ts.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/logger.d.ts.map +0 -1
- package/dist/types/udp.d.ts.map +0 -1
- package/dist/udp/index.d.ts.map +0 -1
- package/dist/utils/agent-manager.d.ts.map +0 -1
- package/dist/utils/body.d.ts.map +0 -1
- package/dist/utils/cert.d.ts.map +0 -1
- package/dist/utils/charset.d.ts.map +0 -1
- package/dist/utils/chart.d.ts.map +0 -1
- package/dist/utils/client-pool.d.ts.map +0 -1
- package/dist/utils/colors.d.ts.map +0 -1
- package/dist/utils/concurrency.d.ts.map +0 -1
- package/dist/utils/dns-toolkit.d.ts.map +0 -1
- package/dist/utils/dns.d.ts.map +0 -1
- package/dist/utils/doh.d.ts.map +0 -1
- package/dist/utils/download.d.ts.map +0 -1
- package/dist/utils/env-proxy.d.ts.map +0 -1
- package/dist/utils/header-parser.d.ts.map +0 -1
- package/dist/utils/html-cleaner.d.ts.map +0 -1
- package/dist/utils/link-header.d.ts.map +0 -1
- package/dist/utils/optional-require.d.ts.map +0 -1
- package/dist/utils/progress.d.ts.map +0 -1
- package/dist/utils/rdap.d.ts.map +0 -1
- package/dist/utils/request-pool.d.ts.map +0 -1
- package/dist/utils/security-grader.d.ts.map +0 -1
- package/dist/utils/sparkline.d.ts.map +0 -1
- package/dist/utils/sse.d.ts.map +0 -1
- package/dist/utils/streaming.d.ts.map +0 -1
- package/dist/utils/system-metrics.d.ts.map +0 -1
- package/dist/utils/tls-inspector.d.ts.map +0 -1
- package/dist/utils/try-fn.d.ts.map +0 -1
- package/dist/utils/upload.d.ts.map +0 -1
- package/dist/utils/user-agent.d.ts.map +0 -1
- package/dist/utils/whois.d.ts.map +0 -1
- package/dist/webrtc/index.d.ts.map +0 -1
- package/dist/websocket/client.d.ts.map +0 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { BaseAIProvider, AIError, RateLimitError, OverloadedError, } from './base.js';
|
|
2
|
+
import { StreamError } from '../../core/errors.js';
|
|
3
|
+
export class OllamaProvider extends BaseAIProvider {
|
|
4
|
+
ollamaConfig;
|
|
5
|
+
constructor(config = {}) {
|
|
6
|
+
super({ ...config, name: 'ollama' });
|
|
7
|
+
this.ollamaConfig = config;
|
|
8
|
+
}
|
|
9
|
+
getEnvApiKey() {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
getBaseUrl() {
|
|
13
|
+
return this.config.baseUrl || 'http://127.0.0.1:11434/api';
|
|
14
|
+
}
|
|
15
|
+
buildHeaders() {
|
|
16
|
+
return {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
...this.config.headers,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
transformMessages(messages) {
|
|
22
|
+
return messages.map((msg) => {
|
|
23
|
+
const { content, images } = this.extractContentAndImages(msg.content);
|
|
24
|
+
return {
|
|
25
|
+
role: msg.role,
|
|
26
|
+
content,
|
|
27
|
+
images: images.length > 0 ? images : undefined,
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
extractContentAndImages(content) {
|
|
32
|
+
if (typeof content === 'string') {
|
|
33
|
+
return { content, images: [] };
|
|
34
|
+
}
|
|
35
|
+
let text = '';
|
|
36
|
+
const images = [];
|
|
37
|
+
for (const part of content) {
|
|
38
|
+
if (part.type === 'text') {
|
|
39
|
+
text += part.text;
|
|
40
|
+
}
|
|
41
|
+
else if (part.type === 'image') {
|
|
42
|
+
images.push(Buffer.from(part.data).toString('base64'));
|
|
43
|
+
}
|
|
44
|
+
else if (part.type === 'image_url') {
|
|
45
|
+
if (part.image_url.url.startsWith('data:')) {
|
|
46
|
+
const base64 = part.image_url.url.split(',')[1];
|
|
47
|
+
if (base64)
|
|
48
|
+
images.push(base64);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return { content: text, images };
|
|
53
|
+
}
|
|
54
|
+
async chat(options) {
|
|
55
|
+
const context = {
|
|
56
|
+
startTime: performance.now(),
|
|
57
|
+
tokenCount: 0,
|
|
58
|
+
};
|
|
59
|
+
const body = this.buildChatBody(options, false);
|
|
60
|
+
const response = await this.makeRequest('/chat', body, options.signal);
|
|
61
|
+
const data = await response.json();
|
|
62
|
+
return this.parseResponse(data, context);
|
|
63
|
+
}
|
|
64
|
+
async stream(options) {
|
|
65
|
+
const context = {
|
|
66
|
+
startTime: performance.now(),
|
|
67
|
+
tokenCount: 0,
|
|
68
|
+
};
|
|
69
|
+
const body = this.buildChatBody(options, true);
|
|
70
|
+
const response = await this.makeRequest('/chat', body, options.signal);
|
|
71
|
+
return this.parseNDJSONStream(response, context);
|
|
72
|
+
}
|
|
73
|
+
async embed(options) {
|
|
74
|
+
const startTime = performance.now();
|
|
75
|
+
const body = {
|
|
76
|
+
model: options.model || this.config.defaultModel || 'nomic-embed-text',
|
|
77
|
+
input: options.input,
|
|
78
|
+
};
|
|
79
|
+
if (this.ollamaConfig.keepAlive) {
|
|
80
|
+
body.keep_alive = this.ollamaConfig.keepAlive;
|
|
81
|
+
}
|
|
82
|
+
const response = await this.makeRequest('/embed', body, options.signal);
|
|
83
|
+
const data = await response.json();
|
|
84
|
+
const latency = {
|
|
85
|
+
ttft: performance.now() - startTime,
|
|
86
|
+
tps: 0,
|
|
87
|
+
total: performance.now() - startTime,
|
|
88
|
+
};
|
|
89
|
+
const usage = {
|
|
90
|
+
inputTokens: data.prompt_eval_count || 0,
|
|
91
|
+
outputTokens: 0,
|
|
92
|
+
totalTokens: data.prompt_eval_count || 0,
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
embeddings: data.embeddings,
|
|
96
|
+
usage,
|
|
97
|
+
model: data.model,
|
|
98
|
+
provider: 'ollama',
|
|
99
|
+
latency,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
buildChatBody(options, stream) {
|
|
103
|
+
const body = {
|
|
104
|
+
model: options.model || this.config.defaultModel || 'llama3',
|
|
105
|
+
messages: this.transformMessages(options.messages),
|
|
106
|
+
stream,
|
|
107
|
+
options: {},
|
|
108
|
+
};
|
|
109
|
+
if (options.responseFormat?.type === 'json_object') {
|
|
110
|
+
body.format = 'json';
|
|
111
|
+
}
|
|
112
|
+
if (this.ollamaConfig.keepAlive) {
|
|
113
|
+
body.keep_alive = this.ollamaConfig.keepAlive;
|
|
114
|
+
}
|
|
115
|
+
if (options.temperature !== undefined)
|
|
116
|
+
body.options.temperature = options.temperature;
|
|
117
|
+
if (options.topP !== undefined)
|
|
118
|
+
body.options.top_p = options.topP;
|
|
119
|
+
if (options.maxTokens !== undefined)
|
|
120
|
+
body.options.num_predict = options.maxTokens;
|
|
121
|
+
if (options.stop)
|
|
122
|
+
body.options.stop = options.stop;
|
|
123
|
+
return body;
|
|
124
|
+
}
|
|
125
|
+
async makeRequest(endpoint, body, signal) {
|
|
126
|
+
const url = `${this.getBaseUrl()}${endpoint}`;
|
|
127
|
+
const headers = this.buildHeaders();
|
|
128
|
+
const response = await fetch(url, {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
headers,
|
|
131
|
+
body: JSON.stringify(body),
|
|
132
|
+
signal,
|
|
133
|
+
});
|
|
134
|
+
if (!response.ok) {
|
|
135
|
+
let errorMsg = response.statusText;
|
|
136
|
+
try {
|
|
137
|
+
const err = await response.json();
|
|
138
|
+
if (err.error)
|
|
139
|
+
errorMsg = err.error;
|
|
140
|
+
}
|
|
141
|
+
catch { }
|
|
142
|
+
if (response.status === 429)
|
|
143
|
+
throw new RateLimitError('ollama');
|
|
144
|
+
if (response.status === 503)
|
|
145
|
+
throw new OverloadedError('ollama');
|
|
146
|
+
throw new AIError(errorMsg, 'ollama', String(response.status), response.status);
|
|
147
|
+
}
|
|
148
|
+
return response;
|
|
149
|
+
}
|
|
150
|
+
parseResponse(data, context) {
|
|
151
|
+
const usage = {
|
|
152
|
+
inputTokens: data.prompt_eval_count || 0,
|
|
153
|
+
outputTokens: data.eval_count || 0,
|
|
154
|
+
totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
|
|
155
|
+
};
|
|
156
|
+
context.tokenCount = usage.outputTokens;
|
|
157
|
+
return {
|
|
158
|
+
content: data.message.content,
|
|
159
|
+
usage,
|
|
160
|
+
latency: this.calculateLatency(context),
|
|
161
|
+
model: data.model,
|
|
162
|
+
provider: 'ollama',
|
|
163
|
+
cached: false,
|
|
164
|
+
finishReason: data.done ? 'stop' : undefined,
|
|
165
|
+
raw: data,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
parseStreamEvent(_chunk, _context) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
async *parseNDJSONStream(response, context) {
|
|
172
|
+
const reader = response.body?.getReader();
|
|
173
|
+
if (!reader)
|
|
174
|
+
throw new StreamError('Response body is not readable', { streamType: 'ndjson' });
|
|
175
|
+
const decoder = new TextDecoder();
|
|
176
|
+
let buffer = '';
|
|
177
|
+
try {
|
|
178
|
+
while (true) {
|
|
179
|
+
const { done, value } = await reader.read();
|
|
180
|
+
if (done)
|
|
181
|
+
break;
|
|
182
|
+
buffer += decoder.decode(value, { stream: true });
|
|
183
|
+
const lines = buffer.split('\n');
|
|
184
|
+
buffer = lines.pop() || '';
|
|
185
|
+
for (const line of lines) {
|
|
186
|
+
if (!line.trim())
|
|
187
|
+
continue;
|
|
188
|
+
try {
|
|
189
|
+
const data = JSON.parse(line);
|
|
190
|
+
if (data.message?.content) {
|
|
191
|
+
if (!context.firstTokenTime)
|
|
192
|
+
context.firstTokenTime = performance.now();
|
|
193
|
+
context.tokenCount++;
|
|
194
|
+
yield { type: 'text', content: data.message.content };
|
|
195
|
+
}
|
|
196
|
+
if (data.done) {
|
|
197
|
+
const usage = {
|
|
198
|
+
inputTokens: data.prompt_eval_count || 0,
|
|
199
|
+
outputTokens: data.eval_count || 0,
|
|
200
|
+
totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
|
|
201
|
+
};
|
|
202
|
+
yield { type: 'done', finishReason: 'stop', usage };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (buffer.trim()) {
|
|
210
|
+
const lines = buffer.split('\n');
|
|
211
|
+
for (const line of lines) {
|
|
212
|
+
if (!line.trim())
|
|
213
|
+
continue;
|
|
214
|
+
try {
|
|
215
|
+
const data = JSON.parse(line);
|
|
216
|
+
if (data.message?.content) {
|
|
217
|
+
if (!context.firstTokenTime)
|
|
218
|
+
context.firstTokenTime = performance.now();
|
|
219
|
+
context.tokenCount++;
|
|
220
|
+
yield { type: 'text', content: data.message.content };
|
|
221
|
+
}
|
|
222
|
+
if (data.done) {
|
|
223
|
+
const usage = {
|
|
224
|
+
inputTokens: data.prompt_eval_count || 0,
|
|
225
|
+
outputTokens: data.eval_count || 0,
|
|
226
|
+
totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
|
|
227
|
+
};
|
|
228
|
+
yield { type: 'done', finishReason: 'stop', usage };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
reader.releaseLock();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function cosineSimilarity(a, b) {
|
|
2
|
+
if (a.length !== b.length) {
|
|
3
|
+
throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
|
|
4
|
+
}
|
|
5
|
+
let dot = 0;
|
|
6
|
+
let normA = 0;
|
|
7
|
+
let normB = 0;
|
|
8
|
+
for (let i = 0; i < a.length; i++) {
|
|
9
|
+
dot += a[i] * b[i];
|
|
10
|
+
normA += a[i] * a[i];
|
|
11
|
+
normB += b[i] * b[i];
|
|
12
|
+
}
|
|
13
|
+
if (normA === 0 || normB === 0)
|
|
14
|
+
return 0;
|
|
15
|
+
return dot / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
16
|
+
}
|
|
17
|
+
export function euclideanDistance(a, b) {
|
|
18
|
+
if (a.length !== b.length) {
|
|
19
|
+
throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
|
|
20
|
+
}
|
|
21
|
+
let sum = 0;
|
|
22
|
+
for (let i = 0; i < a.length; i++) {
|
|
23
|
+
const diff = a[i] - b[i];
|
|
24
|
+
sum += diff * diff;
|
|
25
|
+
}
|
|
26
|
+
return Math.sqrt(sum);
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AIClient } from '../../types/ai.js';
|
|
2
|
+
export interface VectorDocument {
|
|
3
|
+
id: string;
|
|
4
|
+
content: string;
|
|
5
|
+
embedding?: number[];
|
|
6
|
+
metadata?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface SearchResult extends VectorDocument {
|
|
9
|
+
score: number;
|
|
10
|
+
}
|
|
11
|
+
export interface VectorStoreOptions {
|
|
12
|
+
client?: AIClient;
|
|
13
|
+
model?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class MemoryVectorStore {
|
|
16
|
+
private documents;
|
|
17
|
+
private client?;
|
|
18
|
+
private model?;
|
|
19
|
+
constructor(options?: VectorStoreOptions);
|
|
20
|
+
add(docs: Array<Partial<VectorDocument> & {
|
|
21
|
+
content: string;
|
|
22
|
+
}>): Promise<void>;
|
|
23
|
+
search(query: string, limit?: number, threshold?: number): Promise<SearchResult[]>;
|
|
24
|
+
delete(id: string): boolean;
|
|
25
|
+
clear(): void;
|
|
26
|
+
get count(): number;
|
|
27
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { cosineSimilarity } from './similarity.js';
|
|
2
|
+
export class MemoryVectorStore {
|
|
3
|
+
documents = new Map();
|
|
4
|
+
client;
|
|
5
|
+
model;
|
|
6
|
+
constructor(options = {}) {
|
|
7
|
+
this.client = options.client;
|
|
8
|
+
this.model = options.model;
|
|
9
|
+
}
|
|
10
|
+
async add(docs) {
|
|
11
|
+
const docsToEmbed = [];
|
|
12
|
+
const readyDocs = [];
|
|
13
|
+
for (const doc of docs) {
|
|
14
|
+
const id = doc.id || Math.random().toString(36).substring(7);
|
|
15
|
+
const fullDoc = {
|
|
16
|
+
id,
|
|
17
|
+
content: doc.content,
|
|
18
|
+
metadata: doc.metadata || {},
|
|
19
|
+
embedding: doc.embedding,
|
|
20
|
+
};
|
|
21
|
+
if (!fullDoc.embedding) {
|
|
22
|
+
docsToEmbed.push(fullDoc);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
readyDocs.push(fullDoc);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (docsToEmbed.length > 0) {
|
|
29
|
+
if (!this.client) {
|
|
30
|
+
throw new Error('AI Client required to generate embeddings. Pass "client" to constructor or provide "embedding" in document.');
|
|
31
|
+
}
|
|
32
|
+
const contents = docsToEmbed.map(d => d.content);
|
|
33
|
+
const response = await this.client.embed({
|
|
34
|
+
model: this.model,
|
|
35
|
+
input: contents,
|
|
36
|
+
});
|
|
37
|
+
docsToEmbed.forEach((doc, i) => {
|
|
38
|
+
doc.embedding = response.embeddings[i];
|
|
39
|
+
readyDocs.push(doc);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
for (const doc of readyDocs) {
|
|
43
|
+
this.documents.set(doc.id, doc);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async search(query, limit = 3, threshold = 0.0) {
|
|
47
|
+
if (this.documents.size === 0)
|
|
48
|
+
return [];
|
|
49
|
+
if (!this.client) {
|
|
50
|
+
throw new Error('AI Client required to search by text query.');
|
|
51
|
+
}
|
|
52
|
+
const response = await this.client.embed({
|
|
53
|
+
model: this.model,
|
|
54
|
+
input: query,
|
|
55
|
+
});
|
|
56
|
+
const queryEmbedding = response.embeddings[0];
|
|
57
|
+
const results = [];
|
|
58
|
+
for (const doc of this.documents.values()) {
|
|
59
|
+
if (!doc.embedding)
|
|
60
|
+
continue;
|
|
61
|
+
const score = cosineSimilarity(queryEmbedding, doc.embedding);
|
|
62
|
+
if (score >= threshold) {
|
|
63
|
+
results.push({
|
|
64
|
+
...doc,
|
|
65
|
+
score,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return results
|
|
70
|
+
.sort((a, b) => b.score - a.score)
|
|
71
|
+
.slice(0, limit);
|
|
72
|
+
}
|
|
73
|
+
delete(id) {
|
|
74
|
+
return this.documents.delete(id);
|
|
75
|
+
}
|
|
76
|
+
clear() {
|
|
77
|
+
this.documents.clear();
|
|
78
|
+
}
|
|
79
|
+
get count() {
|
|
80
|
+
return this.documents.size;
|
|
81
|
+
}
|
|
82
|
+
}
|
package/dist/bench/stats.d.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CacheEntry, CacheStorage } from '../types/index.js';
|
|
2
|
+
export declare class FileStorage implements CacheStorage {
|
|
3
|
+
private dir;
|
|
4
|
+
constructor(baseDir?: string);
|
|
5
|
+
private getHash;
|
|
6
|
+
private getPath;
|
|
7
|
+
private ensureDir;
|
|
8
|
+
get(key: string): Promise<CacheEntry | undefined>;
|
|
9
|
+
set(key: string, entry: CacheEntry, ttl?: number): Promise<void>;
|
|
10
|
+
delete(key: string): Promise<void>;
|
|
11
|
+
clear(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile, unlink, rm } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { existsSync } from 'node:fs';
|
|
5
|
+
export class FileStorage {
|
|
6
|
+
dir;
|
|
7
|
+
constructor(baseDir = '.recker/cache') {
|
|
8
|
+
this.dir = baseDir;
|
|
9
|
+
}
|
|
10
|
+
getHash(key) {
|
|
11
|
+
return createHash('md5').update(key).digest('hex');
|
|
12
|
+
}
|
|
13
|
+
getPath(key) {
|
|
14
|
+
return join(this.dir, `${this.getHash(key)}.json`);
|
|
15
|
+
}
|
|
16
|
+
async ensureDir() {
|
|
17
|
+
if (!existsSync(this.dir)) {
|
|
18
|
+
await mkdir(this.dir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async get(key) {
|
|
22
|
+
try {
|
|
23
|
+
const path = this.getPath(key);
|
|
24
|
+
if (!existsSync(path))
|
|
25
|
+
return undefined;
|
|
26
|
+
const content = await readFile(path, 'utf-8');
|
|
27
|
+
const data = JSON.parse(content);
|
|
28
|
+
return data;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async set(key, entry, ttl) {
|
|
35
|
+
await this.ensureDir();
|
|
36
|
+
const path = this.getPath(key);
|
|
37
|
+
await writeFile(path, JSON.stringify(entry), 'utf-8');
|
|
38
|
+
}
|
|
39
|
+
async delete(key) {
|
|
40
|
+
const path = this.getPath(key);
|
|
41
|
+
if (existsSync(path)) {
|
|
42
|
+
await unlink(path);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async clear() {
|
|
46
|
+
if (existsSync(this.dir)) {
|
|
47
|
+
await rm(this.dir, { recursive: true, force: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import type { CacheStorage, CacheEntry } from '../types/index.js';
|
|
2
|
+
export interface FileSystemStorageOptions {
|
|
3
|
+
path?: string;
|
|
4
|
+
ttl?: number;
|
|
5
|
+
cleanupInterval?: number;
|
|
6
|
+
maxSize?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class FileSystemStorage implements CacheStorage {
|
|
9
|
+
private cacheDir;
|
|
10
|
+
private defaultTtl;
|
|
11
|
+
private cleanupInterval;
|
|
12
|
+
private maxSize;
|
|
13
|
+
private cleanupTimer;
|
|
14
|
+
constructor(options?: FileSystemStorageOptions);
|
|
15
|
+
private initCacheDir;
|
|
16
|
+
private getFilePath;
|
|
17
|
+
private isExpired;
|
|
18
|
+
get(key: string): Promise<CacheEntry | undefined | null>;
|
|
19
|
+
set(key: string, value: CacheEntry, ttl?: number): Promise<void>;
|
|
10
20
|
delete(key: string): Promise<void>;
|
|
11
|
-
clear(): Promise<void>;
|
|
21
|
+
clear(prefix?: string): Promise<void>;
|
|
22
|
+
size(): Promise<number>;
|
|
23
|
+
keys(): Promise<string[]>;
|
|
24
|
+
private cleanupExpired;
|
|
25
|
+
private enforceMaxSize;
|
|
26
|
+
shutdown(): void;
|
|
12
27
|
}
|
|
13
|
-
//# sourceMappingURL=file-storage.d.ts.map
|