@staticn0va/wigolo 0.1.0 → 0.1.2
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 +1 -1
- package/README.md +146 -227
- package/SKILL.md +382 -0
- package/assets/blocks/claude-code/CLAUDE.md.block +20 -0
- package/assets/blocks/claude-code/wigolo-command.md +40 -0
- package/assets/blocks/cursor/wigolo.mdc +46 -0
- package/assets/blocks/gemini-cli/GEMINI.md.block +18 -0
- package/assets/blocks/vscode/copilot-instructions.md.block +18 -0
- package/assets/skills/wigolo/SKILL.md +50 -0
- package/assets/skills/wigolo/rules/cache-first.md +30 -0
- package/assets/skills/wigolo/rules/synthesis.md +43 -0
- package/assets/skills/wigolo-agent/SKILL.md +73 -0
- package/assets/skills/wigolo-crawl/SKILL.md +60 -0
- package/assets/skills/wigolo-extract/SKILL.md +59 -0
- package/assets/skills/wigolo-fetch/SKILL.md +65 -0
- package/assets/skills/wigolo-find-similar/SKILL.md +72 -0
- package/assets/skills/wigolo-research/SKILL.md +77 -0
- package/assets/skills/wigolo-search/SKILL.md +78 -0
- package/dist/agent/executor.d.ts +33 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +233 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/pipeline.d.ts +5 -0
- package/dist/agent/pipeline.d.ts.map +1 -0
- package/dist/agent/pipeline.js +238 -0
- package/dist/agent/pipeline.js.map +1 -0
- package/dist/agent/planner.d.ts +13 -0
- package/dist/agent/planner.d.ts.map +1 -0
- package/dist/agent/planner.js +271 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/agent/relevance.d.ts +15 -0
- package/dist/agent/relevance.d.ts.map +1 -0
- package/dist/agent/relevance.js +60 -0
- package/dist/agent/relevance.js.map +1 -0
- package/dist/cache/backfill-embeddings.d.ts +23 -0
- package/dist/cache/backfill-embeddings.d.ts.map +1 -0
- package/dist/cache/backfill-embeddings.js +105 -0
- package/dist/cache/backfill-embeddings.js.map +1 -0
- package/dist/cache/change-detector.d.ts +7 -0
- package/dist/cache/change-detector.d.ts.map +1 -0
- package/dist/cache/change-detector.js +43 -0
- package/dist/cache/change-detector.js.map +1 -0
- package/dist/cache/db.d.ts +1 -0
- package/dist/cache/db.d.ts.map +1 -1
- package/dist/cache/db.js +94 -22
- package/dist/cache/db.js.map +1 -1
- package/dist/cache/diff-summary.d.ts +2 -0
- package/dist/cache/diff-summary.d.ts.map +1 -0
- package/dist/cache/diff-summary.js +82 -0
- package/dist/cache/diff-summary.js.map +1 -0
- package/dist/cache/migrations/runner.d.ts +29 -0
- package/dist/cache/migrations/runner.d.ts.map +1 -0
- package/dist/cache/migrations/runner.js +147 -0
- package/dist/cache/migrations/runner.js.map +1 -0
- package/dist/cache/sqlite-vec-store.d.ts +42 -0
- package/dist/cache/sqlite-vec-store.d.ts.map +1 -0
- package/dist/cache/sqlite-vec-store.js +176 -0
- package/dist/cache/sqlite-vec-store.js.map +1 -0
- package/dist/cache/store.d.ts +47 -1
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +364 -168
- package/dist/cache/store.js.map +1 -1
- package/dist/cli/agents/antigravity.d.ts +20 -0
- package/dist/cli/agents/antigravity.d.ts.map +1 -0
- package/dist/cli/agents/antigravity.js +49 -0
- package/dist/cli/agents/antigravity.js.map +1 -0
- package/dist/cli/agents/claude-code.d.ts +25 -0
- package/dist/cli/agents/claude-code.d.ts.map +1 -0
- package/dist/cli/agents/claude-code.js +111 -0
- package/dist/cli/agents/claude-code.js.map +1 -0
- package/dist/cli/agents/cursor.d.ts +21 -0
- package/dist/cli/agents/cursor.d.ts.map +1 -0
- package/dist/cli/agents/cursor.js +58 -0
- package/dist/cli/agents/cursor.js.map +1 -0
- package/dist/cli/agents/gemini-cli.d.ts +21 -0
- package/dist/cli/agents/gemini-cli.d.ts.map +1 -0
- package/dist/cli/agents/gemini-cli.js +55 -0
- package/dist/cli/agents/gemini-cli.js.map +1 -0
- package/dist/cli/agents/registry.d.ts +21 -0
- package/dist/cli/agents/registry.d.ts.map +1 -0
- package/dist/cli/agents/registry.js +27 -0
- package/dist/cli/agents/registry.js.map +1 -0
- package/dist/cli/agents/utils.d.ts +26 -0
- package/dist/cli/agents/utils.d.ts.map +1 -0
- package/dist/cli/agents/utils.js +136 -0
- package/dist/cli/agents/utils.js.map +1 -0
- package/dist/cli/agents/vscode.d.ts +21 -0
- package/dist/cli/agents/vscode.d.ts.map +1 -0
- package/dist/cli/agents/vscode.js +62 -0
- package/dist/cli/agents/vscode.js.map +1 -0
- package/dist/cli/auth.d.ts +2 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +94 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/backfill.d.ts +2 -0
- package/dist/cli/backfill.d.ts.map +1 -0
- package/dist/cli/backfill.js +58 -0
- package/dist/cli/backfill.js.map +1 -0
- package/dist/cli/daemon.d.ts +6 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +61 -3
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +344 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/health.d.ts +1 -1
- package/dist/cli/health.d.ts.map +1 -1
- package/dist/cli/health.js +42 -3
- package/dist/cli/health.js.map +1 -1
- package/dist/cli/help.d.ts +6 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +63 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +35 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +201 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/plugin.d.ts +5 -0
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +185 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/cli/setup-mcp.d.ts +2 -0
- package/dist/cli/setup-mcp.d.ts.map +1 -0
- package/dist/cli/setup-mcp.js +114 -0
- package/dist/cli/setup-mcp.js.map +1 -0
- package/dist/cli/shell.d.ts +2 -0
- package/dist/cli/shell.d.ts.map +1 -0
- package/dist/cli/shell.js +86 -0
- package/dist/cli/shell.js.map +1 -0
- package/dist/cli/shutdown.d.ts +2 -0
- package/dist/cli/shutdown.d.ts.map +1 -0
- package/dist/cli/shutdown.js +26 -0
- package/dist/cli/shutdown.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +31 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/telemetry.d.ts +10 -0
- package/dist/cli/telemetry.d.ts.map +1 -0
- package/dist/cli/telemetry.js +56 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/tui/agents-types.d.ts +28 -0
- package/dist/cli/tui/agents-types.d.ts.map +1 -0
- package/dist/cli/tui/agents-types.js +1 -0
- package/dist/cli/tui/agents-types.js.map +1 -0
- package/dist/cli/tui/agents.d.ts +11 -0
- package/dist/cli/tui/agents.d.ts.map +1 -0
- package/dist/cli/tui/agents.js +93 -0
- package/dist/cli/tui/agents.js.map +1 -0
- package/dist/cli/tui/banner.d.ts +3 -0
- package/dist/cli/tui/banner.d.ts.map +1 -0
- package/dist/cli/tui/banner.js +30 -0
- package/dist/cli/tui/banner.js.map +1 -0
- package/dist/cli/tui/components/AgentSelect.d.ts +13 -0
- package/dist/cli/tui/components/AgentSelect.d.ts.map +1 -0
- package/dist/cli/tui/components/AgentSelect.js +116 -0
- package/dist/cli/tui/components/AgentSelect.js.map +1 -0
- package/dist/cli/tui/components/Banner.d.ts +6 -0
- package/dist/cli/tui/components/Banner.d.ts.map +1 -0
- package/dist/cli/tui/components/Banner.js +25 -0
- package/dist/cli/tui/components/Banner.js.map +1 -0
- package/dist/cli/tui/components/BrowserSelect.d.ts +7 -0
- package/dist/cli/tui/components/BrowserSelect.d.ts.map +1 -0
- package/dist/cli/tui/components/BrowserSelect.js +19 -0
- package/dist/cli/tui/components/BrowserSelect.js.map +1 -0
- package/dist/cli/tui/components/InstallProgress.d.ts +9 -0
- package/dist/cli/tui/components/InstallProgress.d.ts.map +1 -0
- package/dist/cli/tui/components/InstallProgress.js +67 -0
- package/dist/cli/tui/components/InstallProgress.js.map +1 -0
- package/dist/cli/tui/components/SkillInstall.d.ts +14 -0
- package/dist/cli/tui/components/SkillInstall.d.ts.map +1 -0
- package/dist/cli/tui/components/SkillInstall.js +94 -0
- package/dist/cli/tui/components/SkillInstall.js.map +1 -0
- package/dist/cli/tui/components/Summary.d.ts +22 -0
- package/dist/cli/tui/components/Summary.d.ts.map +1 -0
- package/dist/cli/tui/components/Summary.js +135 -0
- package/dist/cli/tui/components/Summary.js.map +1 -0
- package/dist/cli/tui/components/SystemCheck.d.ts +8 -0
- package/dist/cli/tui/components/SystemCheck.d.ts.map +1 -0
- package/dist/cli/tui/components/SystemCheck.js +71 -0
- package/dist/cli/tui/components/SystemCheck.js.map +1 -0
- package/dist/cli/tui/components/Verification.d.ts +8 -0
- package/dist/cli/tui/components/Verification.d.ts.map +1 -0
- package/dist/cli/tui/components/Verification.js +63 -0
- package/dist/cli/tui/components/Verification.js.map +1 -0
- package/dist/cli/tui/config-writer-cli.d.ts +12 -0
- package/dist/cli/tui/config-writer-cli.d.ts.map +1 -0
- package/dist/cli/tui/config-writer-cli.js +39 -0
- package/dist/cli/tui/config-writer-cli.js.map +1 -0
- package/dist/cli/tui/config-writer-json.d.ts +16 -0
- package/dist/cli/tui/config-writer-json.d.ts.map +1 -0
- package/dist/cli/tui/config-writer-json.js +86 -0
- package/dist/cli/tui/config-writer-json.js.map +1 -0
- package/dist/cli/tui/config-writer-toml.d.ts +16 -0
- package/dist/cli/tui/config-writer-toml.d.ts.map +1 -0
- package/dist/cli/tui/config-writer-toml.js +83 -0
- package/dist/cli/tui/config-writer-toml.js.map +1 -0
- package/dist/cli/tui/config-writer.d.ts +25 -0
- package/dist/cli/tui/config-writer.d.ts.map +1 -0
- package/dist/cli/tui/config-writer.js +101 -0
- package/dist/cli/tui/config-writer.js.map +1 -0
- package/dist/cli/tui/detect-helpers.d.ts +6 -0
- package/dist/cli/tui/detect-helpers.d.ts.map +1 -0
- package/dist/cli/tui/detect-helpers.js +45 -0
- package/dist/cli/tui/detect-helpers.js.map +1 -0
- package/dist/cli/tui/extras-prompt.d.ts +7 -0
- package/dist/cli/tui/extras-prompt.d.ts.map +1 -0
- package/dist/cli/tui/extras-prompt.js +42 -0
- package/dist/cli/tui/extras-prompt.js.map +1 -0
- package/dist/cli/tui/flags-types.d.ts +19 -0
- package/dist/cli/tui/flags-types.d.ts.map +1 -0
- package/dist/cli/tui/flags-types.js +23 -0
- package/dist/cli/tui/flags-types.js.map +1 -0
- package/dist/cli/tui/flags.d.ts +5 -0
- package/dist/cli/tui/flags.d.ts.map +1 -0
- package/dist/cli/tui/flags.js +132 -0
- package/dist/cli/tui/flags.js.map +1 -0
- package/dist/cli/tui/format.d.ts +14 -0
- package/dist/cli/tui/format.d.ts.map +1 -0
- package/dist/cli/tui/format.js +37 -0
- package/dist/cli/tui/format.js.map +1 -0
- package/dist/cli/tui/hooks/useAgentDetect.d.ts +6 -0
- package/dist/cli/tui/hooks/useAgentDetect.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useAgentDetect.js +19 -0
- package/dist/cli/tui/hooks/useAgentDetect.js.map +1 -0
- package/dist/cli/tui/hooks/useInstall.d.ts +14 -0
- package/dist/cli/tui/hooks/useInstall.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useInstall.js +90 -0
- package/dist/cli/tui/hooks/useInstall.js.map +1 -0
- package/dist/cli/tui/hooks/useSystemCheck.d.ts +13 -0
- package/dist/cli/tui/hooks/useSystemCheck.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useSystemCheck.js +95 -0
- package/dist/cli/tui/hooks/useSystemCheck.js.map +1 -0
- package/dist/cli/tui/hooks/useVerify.d.ts +14 -0
- package/dist/cli/tui/hooks/useVerify.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useVerify.js +71 -0
- package/dist/cli/tui/hooks/useVerify.js.map +1 -0
- package/dist/cli/tui/ink-init.d.ts +2 -0
- package/dist/cli/tui/ink-init.d.ts.map +1 -0
- package/dist/cli/tui/ink-init.js +198 -0
- package/dist/cli/tui/ink-init.js.map +1 -0
- package/dist/cli/tui/reporter-auto.d.ts +7 -0
- package/dist/cli/tui/reporter-auto.d.ts.map +1 -0
- package/dist/cli/tui/reporter-auto.js +15 -0
- package/dist/cli/tui/reporter-auto.js.map +1 -0
- package/dist/cli/tui/reporter.d.ts +26 -0
- package/dist/cli/tui/reporter.d.ts.map +1 -0
- package/dist/cli/tui/reporter.js +32 -0
- package/dist/cli/tui/reporter.js.map +1 -0
- package/dist/cli/tui/run-command.d.ts +14 -0
- package/dist/cli/tui/run-command.d.ts.map +1 -0
- package/dist/cli/tui/run-command.js +72 -0
- package/dist/cli/tui/run-command.js.map +1 -0
- package/dist/cli/tui/select-agents.d.ts +6 -0
- package/dist/cli/tui/select-agents.d.ts.map +1 -0
- package/dist/cli/tui/select-agents.js +32 -0
- package/dist/cli/tui/select-agents.js.map +1 -0
- package/dist/cli/tui/status-agents.d.ts +11 -0
- package/dist/cli/tui/status-agents.d.ts.map +1 -0
- package/dist/cli/tui/status-agents.js +53 -0
- package/dist/cli/tui/status-agents.js.map +1 -0
- package/dist/cli/tui/status-cache.d.ts +6 -0
- package/dist/cli/tui/status-cache.d.ts.map +1 -0
- package/dist/cli/tui/status-cache.js +39 -0
- package/dist/cli/tui/status-cache.js.map +1 -0
- package/dist/cli/tui/status-format.d.ts +14 -0
- package/dist/cli/tui/status-format.d.ts.map +1 -0
- package/dist/cli/tui/status-format.js +41 -0
- package/dist/cli/tui/status-format.js.map +1 -0
- package/dist/cli/tui/status-python.d.ts +6 -0
- package/dist/cli/tui/status-python.d.ts.map +1 -0
- package/dist/cli/tui/status-python.js +30 -0
- package/dist/cli/tui/status-python.js.map +1 -0
- package/dist/cli/tui/system-check.d.ts +24 -0
- package/dist/cli/tui/system-check.d.ts.map +1 -0
- package/dist/cli/tui/system-check.js +103 -0
- package/dist/cli/tui/system-check.js.map +1 -0
- package/dist/cli/tui/tui-reporter.d.ts +19 -0
- package/dist/cli/tui/tui-reporter.d.ts.map +1 -0
- package/dist/cli/tui/tui-reporter.js +95 -0
- package/dist/cli/tui/tui-reporter.js.map +1 -0
- package/dist/cli/tui/utils/config-writer.d.ts +3 -0
- package/dist/cli/tui/utils/config-writer.d.ts.map +1 -0
- package/dist/cli/tui/utils/config-writer.js +22 -0
- package/dist/cli/tui/utils/config-writer.js.map +1 -0
- package/dist/cli/tui/utils/suppress-logs.d.ts +3 -0
- package/dist/cli/tui/utils/suppress-logs.d.ts.map +1 -0
- package/dist/cli/tui/utils/suppress-logs.js +11 -0
- package/dist/cli/tui/utils/suppress-logs.js.map +1 -0
- package/dist/cli/tui/verify-suggestions.d.ts +5 -0
- package/dist/cli/tui/verify-suggestions.d.ts.map +1 -0
- package/dist/cli/tui/verify-suggestions.js +20 -0
- package/dist/cli/tui/verify-suggestions.js.map +1 -0
- package/dist/cli/tui/verify.d.ts +14 -0
- package/dist/cli/tui/verify.d.ts.map +1 -0
- package/dist/cli/tui/verify.js +101 -0
- package/dist/cli/tui/verify.js.map +1 -0
- package/dist/cli/tui/version.d.ts +2 -0
- package/dist/cli/tui/version.d.ts.map +1 -0
- package/dist/cli/tui/version.js +14 -0
- package/dist/cli/tui/version.js.map +1 -0
- package/dist/cli/uninstall.d.ts +2 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +57 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/warmup.d.ts +10 -2
- package/dist/cli/warmup.d.ts.map +1 -1
- package/dist/cli/warmup.js +226 -93
- package/dist/cli/warmup.js.map +1 -1
- package/dist/config.d.ts +28 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +106 -56
- package/dist/config.js.map +1 -1
- package/dist/crawl/crawler.d.ts +6 -0
- package/dist/crawl/crawler.d.ts.map +1 -1
- package/dist/crawl/crawler.js +210 -209
- package/dist/crawl/crawler.js.map +1 -1
- package/dist/crawl/dedup.d.ts +1 -0
- package/dist/crawl/dedup.d.ts.map +1 -1
- package/dist/crawl/dedup.js +124 -81
- package/dist/crawl/dedup.js.map +1 -1
- package/dist/crawl/etag-incremental.d.ts +43 -0
- package/dist/crawl/etag-incremental.d.ts.map +1 -0
- package/dist/crawl/etag-incremental.js +94 -0
- package/dist/crawl/etag-incremental.js.map +1 -0
- package/dist/crawl/index-to-vec.d.ts +10 -0
- package/dist/crawl/index-to-vec.d.ts.map +1 -0
- package/dist/crawl/index-to-vec.js +44 -0
- package/dist/crawl/index-to-vec.js.map +1 -0
- package/dist/crawl/mapper.js +136 -164
- package/dist/crawl/mapper.js.map +1 -1
- package/dist/crawl/rate-limiter.js +63 -66
- package/dist/crawl/rate-limiter.js.map +1 -1
- package/dist/crawl/robots.js +58 -57
- package/dist/crawl/robots.js.map +1 -1
- package/dist/crawl/sitemap-first.d.ts +12 -0
- package/dist/crawl/sitemap-first.d.ts.map +1 -0
- package/dist/crawl/sitemap-first.js +47 -0
- package/dist/crawl/sitemap-first.js.map +1 -0
- package/dist/crawl/sitemap.js +33 -32
- package/dist/crawl/sitemap.js.map +1 -1
- package/dist/crawl/url-utils.d.ts +1 -0
- package/dist/crawl/url-utils.d.ts.map +1 -1
- package/dist/crawl/url-utils.js +49 -37
- package/dist/crawl/url-utils.js.map +1 -1
- package/dist/daemon/health-check.d.ts +16 -0
- package/dist/daemon/health-check.d.ts.map +1 -0
- package/dist/daemon/health-check.js +33 -0
- package/dist/daemon/health-check.js.map +1 -0
- package/dist/daemon/http-server.d.ts +26 -0
- package/dist/daemon/http-server.d.ts.map +1 -0
- package/dist/daemon/http-server.js +275 -0
- package/dist/daemon/http-server.js.map +1 -0
- package/dist/daemon/proxy.d.ts +10 -0
- package/dist/daemon/proxy.d.ts.map +1 -0
- package/dist/daemon/proxy.js +93 -0
- package/dist/daemon/proxy.js.map +1 -0
- package/dist/embedding/embed.d.ts +59 -0
- package/dist/embedding/embed.d.ts.map +1 -0
- package/dist/embedding/embed.js +233 -0
- package/dist/embedding/embed.js.map +1 -0
- package/dist/embedding/fastembed-provider.d.ts +19 -0
- package/dist/embedding/fastembed-provider.d.ts.map +1 -0
- package/dist/embedding/fastembed-provider.js +51 -0
- package/dist/embedding/fastembed-provider.js.map +1 -0
- package/dist/embedding/key-terms.d.ts +12 -0
- package/dist/embedding/key-terms.d.ts.map +1 -0
- package/dist/embedding/key-terms.js +234 -0
- package/dist/embedding/key-terms.js.map +1 -0
- package/dist/extraction/boilerplate.d.ts +15 -0
- package/dist/extraction/boilerplate.d.ts.map +1 -0
- package/dist/extraction/boilerplate.js +52 -0
- package/dist/extraction/boilerplate.js.map +1 -0
- package/dist/extraction/defuddle.d.ts.map +1 -1
- package/dist/extraction/defuddle.js +27 -23
- package/dist/extraction/defuddle.js.map +1 -1
- package/dist/extraction/extract.d.ts.map +1 -1
- package/dist/extraction/extract.js +76 -76
- package/dist/extraction/extract.js.map +1 -1
- package/dist/extraction/jsonld.js +50 -54
- package/dist/extraction/jsonld.js.map +1 -1
- package/dist/extraction/lang-hints.d.ts +2 -0
- package/dist/extraction/lang-hints.d.ts.map +1 -0
- package/dist/extraction/lang-hints.js +30 -0
- package/dist/extraction/lang-hints.js.map +1 -0
- package/dist/extraction/llm-fallback.d.ts +17 -0
- package/dist/extraction/llm-fallback.d.ts.map +1 -0
- package/dist/extraction/llm-fallback.js +130 -0
- package/dist/extraction/llm-fallback.js.map +1 -0
- package/dist/extraction/markdown-sanitize.d.ts +2 -0
- package/dist/extraction/markdown-sanitize.d.ts.map +1 -0
- package/dist/extraction/markdown-sanitize.js +151 -0
- package/dist/extraction/markdown-sanitize.js.map +1 -0
- package/dist/extraction/markdown.d.ts +11 -0
- package/dist/extraction/markdown.d.ts.map +1 -1
- package/dist/extraction/markdown.js +195 -91
- package/dist/extraction/markdown.js.map +1 -1
- package/dist/extraction/pipeline.d.ts +8 -0
- package/dist/extraction/pipeline.d.ts.map +1 -1
- package/dist/extraction/pipeline.js +57 -91
- package/dist/extraction/pipeline.js.map +1 -1
- package/dist/extraction/readability.d.ts +1 -1
- package/dist/extraction/readability.d.ts.map +1 -1
- package/dist/extraction/readability.js +28 -29
- package/dist/extraction/readability.js.map +1 -1
- package/dist/extraction/schema.d.ts +12 -0
- package/dist/extraction/schema.d.ts.map +1 -1
- package/dist/extraction/schema.js +135 -72
- package/dist/extraction/schema.js.map +1 -1
- package/dist/extraction/site-extractors/docs-generic.d.ts.map +1 -1
- package/dist/extraction/site-extractors/docs-generic.js +81 -91
- package/dist/extraction/site-extractors/docs-generic.js.map +1 -1
- package/dist/extraction/site-extractors/github.d.ts.map +1 -1
- package/dist/extraction/site-extractors/github.js +87 -95
- package/dist/extraction/site-extractors/github.js.map +1 -1
- package/dist/extraction/site-extractors/mdn.d.ts.map +1 -1
- package/dist/extraction/site-extractors/mdn.js +46 -54
- package/dist/extraction/site-extractors/mdn.js.map +1 -1
- package/dist/extraction/site-extractors/stackoverflow.d.ts.map +1 -1
- package/dist/extraction/site-extractors/stackoverflow.js +71 -80
- package/dist/extraction/site-extractors/stackoverflow.js.map +1 -1
- package/dist/extraction/structured-data.d.ts +4 -0
- package/dist/extraction/structured-data.d.ts.map +1 -0
- package/dist/extraction/structured-data.js +173 -0
- package/dist/extraction/structured-data.js.map +1 -0
- package/dist/extraction/structured.d.ts +4 -0
- package/dist/extraction/structured.d.ts.map +1 -0
- package/dist/extraction/structured.js +163 -0
- package/dist/extraction/structured.js.map +1 -0
- package/dist/extraction/v1/classifier.d.ts +3 -0
- package/dist/extraction/v1/classifier.d.ts.map +1 -0
- package/dist/extraction/v1/classifier.js +110 -0
- package/dist/extraction/v1/classifier.js.map +1 -0
- package/dist/extraction/v1/extract-provider.d.ts +16 -0
- package/dist/extraction/v1/extract-provider.d.ts.map +1 -0
- package/dist/extraction/v1/extract-provider.js +43 -0
- package/dist/extraction/v1/extract-provider.js.map +1 -0
- package/dist/extraction/v1/local-llm.d.ts +8 -0
- package/dist/extraction/v1/local-llm.d.ts.map +1 -0
- package/dist/extraction/v1/local-llm.js +34 -0
- package/dist/extraction/v1/local-llm.js.map +1 -0
- package/dist/extraction/v1/news.d.ts +3 -0
- package/dist/extraction/v1/news.d.ts.map +1 -0
- package/dist/extraction/v1/news.js +61 -0
- package/dist/extraction/v1/news.js.map +1 -0
- package/dist/extraction/v1/product.d.ts +3 -0
- package/dist/extraction/v1/product.d.ts.map +1 -0
- package/dist/extraction/v1/product.js +166 -0
- package/dist/extraction/v1/product.js.map +1 -0
- package/dist/extraction/v1/recipe.d.ts +3 -0
- package/dist/extraction/v1/recipe.d.ts.map +1 -0
- package/dist/extraction/v1/recipe.js +136 -0
- package/dist/extraction/v1/recipe.js.map +1 -0
- package/dist/extraction/v1/routed.d.ts +17 -0
- package/dist/extraction/v1/routed.d.ts.map +1 -0
- package/dist/extraction/v1/routed.js +68 -0
- package/dist/extraction/v1/routed.js.map +1 -0
- package/dist/extraction/v1/schemas/Article.d.ts +11 -0
- package/dist/extraction/v1/schemas/Article.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/Article.js +23 -0
- package/dist/extraction/v1/schemas/Article.js.map +1 -0
- package/dist/extraction/v1/schemas/CodeSnippet.d.ts +9 -0
- package/dist/extraction/v1/schemas/CodeSnippet.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/CodeSnippet.js +90 -0
- package/dist/extraction/v1/schemas/CodeSnippet.js.map +1 -0
- package/dist/extraction/v1/schemas/EventListing.d.ts +10 -0
- package/dist/extraction/v1/schemas/EventListing.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/EventListing.js +122 -0
- package/dist/extraction/v1/schemas/EventListing.js.map +1 -0
- package/dist/extraction/v1/schemas/Paper.d.ts +10 -0
- package/dist/extraction/v1/schemas/Paper.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/Paper.js +156 -0
- package/dist/extraction/v1/schemas/Paper.js.map +1 -0
- package/dist/extraction/v1/schemas/Product.d.ts +17 -0
- package/dist/extraction/v1/schemas/Product.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/Product.js +149 -0
- package/dist/extraction/v1/schemas/Product.js.map +1 -0
- package/dist/extraction/v1/schemas/Recipe.d.ts +14 -0
- package/dist/extraction/v1/schemas/Recipe.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/Recipe.js +160 -0
- package/dist/extraction/v1/schemas/Recipe.js.map +1 -0
- package/dist/extraction/v1/schemas/index.d.ts +13 -0
- package/dist/extraction/v1/schemas/index.d.ts.map +1 -0
- package/dist/extraction/v1/schemas/index.js +44 -0
- package/dist/extraction/v1/schemas/index.js.map +1 -0
- package/dist/extraction/v1/site-extractors.d.ts +5 -0
- package/dist/extraction/v1/site-extractors.d.ts.map +1 -0
- package/dist/extraction/v1/site-extractors.js +31 -0
- package/dist/extraction/v1/site-extractors.js.map +1 -0
- package/dist/fetch/action-executor.d.ts +28 -0
- package/dist/fetch/action-executor.d.ts.map +1 -0
- package/dist/fetch/action-executor.js +88 -0
- package/dist/fetch/action-executor.js.map +1 -0
- package/dist/fetch/auth.d.ts +2 -1
- package/dist/fetch/auth.d.ts.map +1 -1
- package/dist/fetch/auth.js +56 -26
- package/dist/fetch/auth.js.map +1 -1
- package/dist/fetch/browser-pool.d.ts +30 -11
- package/dist/fetch/browser-pool.d.ts.map +1 -1
- package/dist/fetch/browser-pool.js +303 -127
- package/dist/fetch/browser-pool.js.map +1 -1
- package/dist/fetch/browser-selector.d.ts +17 -0
- package/dist/fetch/browser-selector.d.ts.map +1 -0
- package/dist/fetch/browser-selector.js +72 -0
- package/dist/fetch/browser-selector.js.map +1 -0
- package/dist/fetch/browser-types.d.ts +3 -0
- package/dist/fetch/browser-types.d.ts.map +1 -0
- package/dist/fetch/browser-types.js +45 -0
- package/dist/fetch/browser-types.js.map +1 -0
- package/dist/fetch/cdp-client.d.ts +9 -0
- package/dist/fetch/cdp-client.d.ts.map +1 -0
- package/dist/fetch/cdp-client.js +89 -0
- package/dist/fetch/cdp-client.js.map +1 -0
- package/dist/fetch/content-check.js +39 -46
- package/dist/fetch/content-check.js.map +1 -1
- package/dist/fetch/error-describe.d.ts +7 -0
- package/dist/fetch/error-describe.d.ts.map +1 -0
- package/dist/fetch/error-describe.js +37 -0
- package/dist/fetch/error-describe.js.map +1 -0
- package/dist/fetch/http-client.d.ts +4 -0
- package/dist/fetch/http-client.d.ts.map +1 -1
- package/dist/fetch/http-client.js +147 -128
- package/dist/fetch/http-client.js.map +1 -1
- package/dist/fetch/lightpanda.d.ts +28 -0
- package/dist/fetch/lightpanda.d.ts.map +1 -0
- package/dist/fetch/lightpanda.js +174 -0
- package/dist/fetch/lightpanda.js.map +1 -0
- package/dist/fetch/playwright-tier.d.ts +19 -0
- package/dist/fetch/playwright-tier.d.ts.map +1 -0
- package/dist/fetch/playwright-tier.js +76 -0
- package/dist/fetch/playwright-tier.js.map +1 -0
- package/dist/fetch/router.d.ts +49 -3
- package/dist/fetch/router.d.ts.map +1 -1
- package/dist/fetch/router.js +187 -81
- package/dist/fetch/router.js.map +1 -1
- package/dist/index.js +102 -17
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +31 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +245 -0
- package/dist/instructions.js.map +1 -0
- package/dist/integrations/cloud/llm/anthropic.d.ts +3 -0
- package/dist/integrations/cloud/llm/anthropic.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/anthropic.js +41 -0
- package/dist/integrations/cloud/llm/anthropic.js.map +1 -0
- package/dist/integrations/cloud/llm/cache.d.ts +5 -0
- package/dist/integrations/cloud/llm/cache.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/cache.js +49 -0
- package/dist/integrations/cloud/llm/cache.js.map +1 -0
- package/dist/integrations/cloud/llm/gemini.d.ts +3 -0
- package/dist/integrations/cloud/llm/gemini.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/gemini.js +37 -0
- package/dist/integrations/cloud/llm/gemini.js.map +1 -0
- package/dist/integrations/cloud/llm/groq.d.ts +3 -0
- package/dist/integrations/cloud/llm/groq.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/groq.js +74 -0
- package/dist/integrations/cloud/llm/groq.js.map +1 -0
- package/dist/integrations/cloud/llm/hash.d.ts +3 -0
- package/dist/integrations/cloud/llm/hash.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/hash.js +26 -0
- package/dist/integrations/cloud/llm/hash.js.map +1 -0
- package/dist/integrations/cloud/llm/model-select.d.ts +5 -0
- package/dist/integrations/cloud/llm/model-select.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/model-select.js +32 -0
- package/dist/integrations/cloud/llm/model-select.js.map +1 -0
- package/dist/integrations/cloud/llm/openai.d.ts +3 -0
- package/dist/integrations/cloud/llm/openai.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/openai.js +43 -0
- package/dist/integrations/cloud/llm/openai.js.map +1 -0
- package/dist/integrations/cloud/llm/run.d.ts +27 -0
- package/dist/integrations/cloud/llm/run.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/run.js +99 -0
- package/dist/integrations/cloud/llm/run.js.map +1 -0
- package/dist/integrations/cloud/llm/select.d.ts +5 -0
- package/dist/integrations/cloud/llm/select.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/select.js +30 -0
- package/dist/integrations/cloud/llm/select.js.map +1 -0
- package/dist/integrations/cloud/llm/text-adapters.d.ts +19 -0
- package/dist/integrations/cloud/llm/text-adapters.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/text-adapters.js +103 -0
- package/dist/integrations/cloud/llm/text-adapters.js.map +1 -0
- package/dist/integrations/cloud/llm/types.d.ts +24 -0
- package/dist/integrations/cloud/llm/types.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/types.js +1 -0
- package/dist/integrations/cloud/llm/types.js.map +1 -0
- package/dist/integrations/cloud/llm/validate.d.ts +6 -0
- package/dist/integrations/cloud/llm/validate.d.ts.map +1 -0
- package/dist/integrations/cloud/llm/validate.js +63 -0
- package/dist/integrations/cloud/llm/validate.js.map +1 -0
- package/dist/logger.d.ts +4 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +71 -30
- package/dist/logger.js.map +1 -1
- package/dist/pdf-parse.d.js +1 -0
- package/dist/pdf-parse.d.js.map +1 -0
- package/dist/plugins/loader.d.ts +20 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +157 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +26 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +71 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/validate.d.ts +9 -0
- package/dist/plugins/validate.d.ts.map +1 -0
- package/dist/plugins/validate.js +79 -0
- package/dist/plugins/validate.js.map +1 -0
- package/dist/providers/embed-provider.d.ts +11 -0
- package/dist/providers/embed-provider.d.ts.map +1 -0
- package/dist/providers/embed-provider.js +24 -0
- package/dist/providers/embed-provider.js.map +1 -0
- package/dist/providers/extract-provider.d.ts +23 -0
- package/dist/providers/extract-provider.d.ts.map +1 -0
- package/dist/providers/extract-provider.js +25 -0
- package/dist/providers/extract-provider.js.map +1 -0
- package/dist/providers/rerank-provider.d.ts +17 -0
- package/dist/providers/rerank-provider.d.ts.map +1 -0
- package/dist/providers/rerank-provider.js +41 -0
- package/dist/providers/rerank-provider.js.map +1 -0
- package/dist/providers/search-provider.d.ts +25 -0
- package/dist/providers/search-provider.d.ts.map +1 -0
- package/dist/providers/search-provider.js +44 -0
- package/dist/providers/search-provider.js.map +1 -0
- package/dist/providers/vector-store.d.ts +27 -0
- package/dist/providers/vector-store.d.ts.map +1 -0
- package/dist/providers/vector-store.js +27 -0
- package/dist/providers/vector-store.js.map +1 -0
- package/dist/python-env.d.ts +9 -0
- package/dist/python-env.d.ts.map +1 -0
- package/dist/python-env.js +13 -0
- package/dist/python-env.js.map +1 -0
- package/dist/repl/commands/agent.d.ts +5 -0
- package/dist/repl/commands/agent.d.ts.map +1 -0
- package/dist/repl/commands/agent.js +62 -0
- package/dist/repl/commands/agent.js.map +1 -0
- package/dist/repl/commands/cache.d.ts +4 -0
- package/dist/repl/commands/cache.d.ts.map +1 -0
- package/dist/repl/commands/cache.js +43 -0
- package/dist/repl/commands/cache.js.map +1 -0
- package/dist/repl/commands/crawl.d.ts +7 -0
- package/dist/repl/commands/crawl.d.ts.map +1 -0
- package/dist/repl/commands/crawl.js +44 -0
- package/dist/repl/commands/crawl.js.map +1 -0
- package/dist/repl/commands/extract.d.ts +5 -0
- package/dist/repl/commands/extract.d.ts.map +1 -0
- package/dist/repl/commands/extract.js +47 -0
- package/dist/repl/commands/extract.js.map +1 -0
- package/dist/repl/commands/fetch.d.ts +5 -0
- package/dist/repl/commands/fetch.d.ts.map +1 -0
- package/dist/repl/commands/fetch.js +67 -0
- package/dist/repl/commands/fetch.js.map +1 -0
- package/dist/repl/commands/find-similar.d.ts +5 -0
- package/dist/repl/commands/find-similar.d.ts.map +1 -0
- package/dist/repl/commands/find-similar.js +74 -0
- package/dist/repl/commands/find-similar.js.map +1 -0
- package/dist/repl/commands/research.d.ts +5 -0
- package/dist/repl/commands/research.d.ts.map +1 -0
- package/dist/repl/commands/research.js +65 -0
- package/dist/repl/commands/research.js.map +1 -0
- package/dist/repl/commands/search.d.ts +5 -0
- package/dist/repl/commands/search.d.ts.map +1 -0
- package/dist/repl/commands/search.js +74 -0
- package/dist/repl/commands/search.js.map +1 -0
- package/dist/repl/commands/types.d.ts +9 -0
- package/dist/repl/commands/types.d.ts.map +1 -0
- package/dist/repl/commands/types.js +1 -0
- package/dist/repl/commands/types.js.map +1 -0
- package/dist/repl/formatters.d.ts +13 -0
- package/dist/repl/formatters.d.ts.map +1 -0
- package/dist/repl/formatters.js +283 -0
- package/dist/repl/formatters.js.map +1 -0
- package/dist/repl/parser.d.ts +9 -0
- package/dist/repl/parser.d.ts.map +1 -0
- package/dist/repl/parser.js +86 -0
- package/dist/repl/parser.js.map +1 -0
- package/dist/repl/shell.d.ts +8 -0
- package/dist/repl/shell.d.ts.map +1 -0
- package/dist/repl/shell.js +184 -0
- package/dist/repl/shell.js.map +1 -0
- package/dist/research/branch-exploration.d.ts +14 -0
- package/dist/research/branch-exploration.d.ts.map +1 -0
- package/dist/research/branch-exploration.js +100 -0
- package/dist/research/branch-exploration.js.map +1 -0
- package/dist/research/brief.d.ts +6 -0
- package/dist/research/brief.d.ts.map +1 -0
- package/dist/research/brief.js +246 -0
- package/dist/research/brief.js.map +1 -0
- package/dist/research/citation-graph.d.ts +9 -0
- package/dist/research/citation-graph.d.ts.map +1 -0
- package/dist/research/citation-graph.js +114 -0
- package/dist/research/citation-graph.js.map +1 -0
- package/dist/research/decompose.d.ts +14 -0
- package/dist/research/decompose.d.ts.map +1 -0
- package/dist/research/decompose.js +439 -0
- package/dist/research/decompose.js.map +1 -0
- package/dist/research/pipeline.d.ts +5 -0
- package/dist/research/pipeline.d.ts.map +1 -0
- package/dist/research/pipeline.js +269 -0
- package/dist/research/pipeline.js.map +1 -0
- package/dist/research/synthesis-local.d.ts +19 -0
- package/dist/research/synthesis-local.d.ts.map +1 -0
- package/dist/research/synthesis-local.js +62 -0
- package/dist/research/synthesis-local.js.map +1 -0
- package/dist/research/synthesize.d.ts +10 -0
- package/dist/research/synthesize.d.ts.map +1 -0
- package/dist/research/synthesize.js +137 -0
- package/dist/research/synthesize.js.map +1 -0
- package/dist/search/answer-synthesis.d.ts +33 -0
- package/dist/search/answer-synthesis.d.ts.map +1 -0
- package/dist/search/answer-synthesis.js +244 -0
- package/dist/search/answer-synthesis.js.map +1 -0
- package/dist/search/context-formatter.d.ts +3 -0
- package/dist/search/context-formatter.d.ts.map +1 -0
- package/dist/search/context-formatter.js +56 -0
- package/dist/search/context-formatter.js.map +1 -0
- package/dist/search/dedup.d.ts +1 -0
- package/dist/search/dedup.d.ts.map +1 -1
- package/dist/search/dedup.js +40 -32
- package/dist/search/dedup.js.map +1 -1
- package/dist/search/engines/arxiv.d.ts +7 -0
- package/dist/search/engines/arxiv.d.ts.map +1 -0
- package/dist/search/engines/arxiv.js +70 -0
- package/dist/search/engines/arxiv.js.map +1 -0
- package/dist/search/engines/bing-news.d.ts +7 -0
- package/dist/search/engines/bing-news.d.ts.map +1 -0
- package/dist/search/engines/bing-news.js +97 -0
- package/dist/search/engines/bing-news.js.map +1 -0
- package/dist/search/engines/bing.d.ts +1 -0
- package/dist/search/engines/bing.d.ts.map +1 -1
- package/dist/search/engines/bing.js +100 -44
- package/dist/search/engines/bing.js.map +1 -1
- package/dist/search/engines/devdocs.d.ts +6 -0
- package/dist/search/engines/devdocs.d.ts.map +1 -0
- package/dist/search/engines/devdocs.js +56 -0
- package/dist/search/engines/devdocs.js.map +1 -0
- package/dist/search/engines/duckduckgo.d.ts.map +1 -1
- package/dist/search/engines/duckduckgo.js +56 -44
- package/dist/search/engines/duckduckgo.js.map +1 -1
- package/dist/search/engines/github-code.d.ts +7 -0
- package/dist/search/engines/github-code.d.ts.map +1 -0
- package/dist/search/engines/github-code.js +55 -0
- package/dist/search/engines/github-code.js.map +1 -0
- package/dist/search/engines/hn-algolia.d.ts +7 -0
- package/dist/search/engines/hn-algolia.d.ts.map +1 -0
- package/dist/search/engines/hn-algolia.js +76 -0
- package/dist/search/engines/hn-algolia.js.map +1 -0
- package/dist/search/engines/lobsters.d.ts +7 -0
- package/dist/search/engines/lobsters.d.ts.map +1 -0
- package/dist/search/engines/lobsters.js +83 -0
- package/dist/search/engines/lobsters.js.map +1 -0
- package/dist/search/engines/mdn.d.ts +7 -0
- package/dist/search/engines/mdn.d.ts.map +1 -0
- package/dist/search/engines/mdn.js +48 -0
- package/dist/search/engines/mdn.js.map +1 -0
- package/dist/search/engines/semantic-scholar.d.ts +7 -0
- package/dist/search/engines/semantic-scholar.d.ts.map +1 -0
- package/dist/search/engines/semantic-scholar.js +69 -0
- package/dist/search/engines/semantic-scholar.js.map +1 -0
- package/dist/search/engines/stackoverflow.d.ts +7 -0
- package/dist/search/engines/stackoverflow.d.ts.map +1 -0
- package/dist/search/engines/stackoverflow.js +73 -0
- package/dist/search/engines/stackoverflow.js.map +1 -0
- package/dist/search/engines/startpage.d.ts.map +1 -1
- package/dist/search/engines/startpage.js +65 -46
- package/dist/search/engines/startpage.js.map +1 -1
- package/dist/search/evidence.d.ts +25 -0
- package/dist/search/evidence.d.ts.map +1 -0
- package/dist/search/evidence.js +220 -0
- package/dist/search/evidence.js.map +1 -0
- package/dist/search/filters.d.ts.map +1 -1
- package/dist/search/filters.js +58 -54
- package/dist/search/filters.js.map +1 -1
- package/dist/search/find-similar/crawl-rank.d.ts +9 -0
- package/dist/search/find-similar/crawl-rank.d.ts.map +1 -0
- package/dist/search/find-similar/crawl-rank.js +272 -0
- package/dist/search/find-similar/crawl-rank.js.map +1 -0
- package/dist/search/find-similar/mode.d.ts +4 -0
- package/dist/search/find-similar/mode.d.ts.map +1 -0
- package/dist/search/find-similar/mode.js +12 -0
- package/dist/search/find-similar/mode.js.map +1 -0
- package/dist/search/find-similar.d.ts +5 -0
- package/dist/search/find-similar.d.ts.map +1 -0
- package/dist/search/find-similar.js +509 -0
- package/dist/search/find-similar.js.map +1 -0
- package/dist/search/highlights.d.ts +19 -0
- package/dist/search/highlights.d.ts.map +1 -0
- package/dist/search/highlights.js +167 -0
- package/dist/search/highlights.js.map +1 -0
- package/dist/search/language-filter.d.ts +29 -0
- package/dist/search/language-filter.d.ts.map +1 -0
- package/dist/search/language-filter.js +126 -0
- package/dist/search/language-filter.js.map +1 -0
- package/dist/search/legacy/searxng-orchestrator.d.ts +4 -0
- package/dist/search/legacy/searxng-orchestrator.d.ts.map +1 -0
- package/dist/search/legacy/searxng-orchestrator.js +501 -0
- package/dist/search/legacy/searxng-orchestrator.js.map +1 -0
- package/dist/search/legacy/searxng-provider.d.ts +7 -0
- package/dist/search/legacy/searxng-provider.d.ts.map +1 -0
- package/dist/search/legacy/searxng-provider.js +11 -0
- package/dist/search/legacy/searxng-provider.js.map +1 -0
- package/dist/search/multi-query.d.ts +25 -0
- package/dist/search/multi-query.d.ts.map +1 -0
- package/dist/search/multi-query.js +228 -0
- package/dist/search/multi-query.js.map +1 -0
- package/dist/search/query.js +32 -34
- package/dist/search/query.js.map +1 -1
- package/dist/search/rerank.d.ts +3 -1
- package/dist/search/rerank.d.ts.map +1 -1
- package/dist/search/rerank.js +44 -35
- package/dist/search/rerank.js.map +1 -1
- package/dist/search/reranker/authority-boost.d.ts +3 -0
- package/dist/search/reranker/authority-boost.d.ts.map +1 -0
- package/dist/search/reranker/authority-boost.js +179 -0
- package/dist/search/reranker/authority-boost.js.map +1 -0
- package/dist/search/reranker/consensus-boost.d.ts +3 -0
- package/dist/search/reranker/consensus-boost.d.ts.map +1 -0
- package/dist/search/reranker/consensus-boost.js +27 -0
- package/dist/search/reranker/consensus-boost.js.map +1 -0
- package/dist/search/reranker/recency-boost.d.ts +3 -0
- package/dist/search/reranker/recency-boost.d.ts.map +1 -0
- package/dist/search/reranker/recency-boost.js +13 -0
- package/dist/search/reranker/recency-boost.js.map +1 -0
- package/dist/search/reranker/recency.d.ts +3 -0
- package/dist/search/reranker/recency.d.ts.map +1 -0
- package/dist/search/reranker/recency.js +23 -0
- package/dist/search/reranker/recency.js.map +1 -0
- package/dist/search/reranker/transformers-rerank-provider.d.ts +13 -0
- package/dist/search/reranker/transformers-rerank-provider.d.ts.map +1 -0
- package/dist/search/reranker/transformers-rerank-provider.js +94 -0
- package/dist/search/reranker/transformers-rerank-provider.js.map +1 -0
- package/dist/search/rrf.d.ts +17 -0
- package/dist/search/rrf.d.ts.map +1 -0
- package/dist/search/rrf.js +39 -0
- package/dist/search/rrf.js.map +1 -0
- package/dist/search/sampling.d.ts +25 -0
- package/dist/search/sampling.d.ts.map +1 -0
- package/dist/search/sampling.js +52 -0
- package/dist/search/sampling.js.map +1 -0
- package/dist/search/searxng.d.ts.map +1 -1
- package/dist/search/searxng.js +69 -79
- package/dist/search/searxng.js.map +1 -1
- package/dist/search/tokens.d.ts +3 -0
- package/dist/search/tokens.d.ts.map +1 -0
- package/dist/search/tokens.js +39 -0
- package/dist/search/tokens.js.map +1 -0
- package/dist/search/truncate.d.ts +6 -0
- package/dist/search/truncate.d.ts.map +1 -0
- package/dist/search/truncate.js +26 -0
- package/dist/search/truncate.js.map +1 -0
- package/dist/search/url-unwrap.d.ts +3 -0
- package/dist/search/url-unwrap.d.ts.map +1 -0
- package/dist/search/url-unwrap.js +43 -0
- package/dist/search/url-unwrap.js.map +1 -0
- package/dist/search/v1/context-rank.d.ts +13 -0
- package/dist/search/v1/context-rank.d.ts.map +1 -0
- package/dist/search/v1/context-rank.js +74 -0
- package/dist/search/v1/context-rank.js.map +1 -0
- package/dist/search/v1/engine-base.d.ts +27 -0
- package/dist/search/v1/engine-base.d.ts.map +1 -0
- package/dist/search/v1/engine-base.js +110 -0
- package/dist/search/v1/engine-base.js.map +1 -0
- package/dist/search/v1/intent-router.d.ts +22 -0
- package/dist/search/v1/intent-router.d.ts.map +1 -0
- package/dist/search/v1/intent-router.js +138 -0
- package/dist/search/v1/intent-router.js.map +1 -0
- package/dist/search/v1/orchestrator.d.ts +24 -0
- package/dist/search/v1/orchestrator.d.ts.map +1 -0
- package/dist/search/v1/orchestrator.js +163 -0
- package/dist/search/v1/orchestrator.js.map +1 -0
- package/dist/search/v1/recency-boost.d.ts +9 -0
- package/dist/search/v1/recency-boost.d.ts.map +1 -0
- package/dist/search/v1/recency-boost.js +37 -0
- package/dist/search/v1/recency-boost.js.map +1 -0
- package/dist/search/v1/recent-cache-dedup.d.ts +6 -0
- package/dist/search/v1/recent-cache-dedup.d.ts.map +1 -0
- package/dist/search/v1/recent-cache-dedup.js +85 -0
- package/dist/search/v1/recent-cache-dedup.js.map +1 -0
- package/dist/search/v1/rss/feed-config.d.ts +21 -0
- package/dist/search/v1/rss/feed-config.d.ts.map +1 -0
- package/dist/search/v1/rss/feed-config.js +90 -0
- package/dist/search/v1/rss/feed-config.js.map +1 -0
- package/dist/search/v1/rss/feed-parser.d.ts +14 -0
- package/dist/search/v1/rss/feed-parser.d.ts.map +1 -0
- package/dist/search/v1/rss/feed-parser.js +104 -0
- package/dist/search/v1/rss/feed-parser.js.map +1 -0
- package/dist/search/v1/rss/feed-poller.d.ts +22 -0
- package/dist/search/v1/rss/feed-poller.d.ts.map +1 -0
- package/dist/search/v1/rss/feed-poller.js +102 -0
- package/dist/search/v1/rss/feed-poller.js.map +1 -0
- package/dist/search/v1/rss/feed-store.d.ts +30 -0
- package/dist/search/v1/rss/feed-store.d.ts.map +1 -0
- package/dist/search/v1/rss/feed-store.js +134 -0
- package/dist/search/v1/rss/feed-store.js.map +1 -0
- package/dist/search/v1/rss/rss-engine.d.ts +6 -0
- package/dist/search/v1/rss/rss-engine.d.ts.map +1 -0
- package/dist/search/v1/rss/rss-engine.js +28 -0
- package/dist/search/v1/rss/rss-engine.js.map +1 -0
- package/dist/search/v1/v1-provider.d.ts +7 -0
- package/dist/search/v1/v1-provider.d.ts.map +1 -0
- package/dist/search/v1/v1-provider.js +68 -0
- package/dist/search/v1/v1-provider.js.map +1 -0
- package/dist/search/v1/verticals/code.d.ts +4 -0
- package/dist/search/v1/verticals/code.d.ts.map +1 -0
- package/dist/search/v1/verticals/code.js +20 -0
- package/dist/search/v1/verticals/code.js.map +1 -0
- package/dist/search/v1/verticals/docs.d.ts +4 -0
- package/dist/search/v1/verticals/docs.d.ts.map +1 -0
- package/dist/search/v1/verticals/docs.js +20 -0
- package/dist/search/v1/verticals/docs.js.map +1 -0
- package/dist/search/v1/verticals/general.d.ts +4 -0
- package/dist/search/v1/verticals/general.d.ts.map +1 -0
- package/dist/search/v1/verticals/general.js +22 -0
- package/dist/search/v1/verticals/general.js.map +1 -0
- package/dist/search/v1/verticals/news.d.ts +10 -0
- package/dist/search/v1/verticals/news.d.ts.map +1 -0
- package/dist/search/v1/verticals/news.js +52 -0
- package/dist/search/v1/verticals/news.js.map +1 -0
- package/dist/search/v1/verticals/papers.d.ts +4 -0
- package/dist/search/v1/verticals/papers.d.ts.map +1 -0
- package/dist/search/v1/verticals/papers.js +23 -0
- package/dist/search/v1/verticals/papers.js.map +1 -0
- package/dist/search/validator.js +31 -31
- package/dist/search/validator.js.map +1 -1
- package/dist/searxng/bootstrap.d.ts +30 -0
- package/dist/searxng/bootstrap.d.ts.map +1 -1
- package/dist/searxng/bootstrap.js +223 -85
- package/dist/searxng/bootstrap.js.map +1 -1
- package/dist/searxng/docker.d.ts.map +1 -1
- package/dist/searxng/docker.js +69 -60
- package/dist/searxng/docker.js.map +1 -1
- package/dist/searxng/process.d.ts +13 -1
- package/dist/searxng/process.d.ts.map +1 -1
- package/dist/searxng/process.js +231 -164
- package/dist/searxng/process.js.map +1 -1
- package/dist/server/backend-status.d.ts +13 -0
- package/dist/server/backend-status.d.ts.map +1 -0
- package/dist/server/backend-status.js +40 -0
- package/dist/server/backend-status.js.map +1 -0
- package/dist/server/tool-schemas.d.ts +549 -0
- package/dist/server/tool-schemas.d.ts.map +1 -0
- package/dist/server/tool-schemas.js +464 -0
- package/dist/server/tool-schemas.js.map +1 -0
- package/dist/server/warmup-on-start.d.ts +9 -0
- package/dist/server/warmup-on-start.d.ts.map +1 -0
- package/dist/server/warmup-on-start.js +55 -0
- package/dist/server/warmup-on-start.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +454 -297
- package/dist/server.js.map +1 -1
- package/dist/tools/agent.d.ts +5 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +128 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/cache.d.ts +2 -1
- package/dist/tools/cache.d.ts.map +1 -1
- package/dist/tools/cache.js +177 -44
- package/dist/tools/cache.js.map +1 -1
- package/dist/tools/crawl.d.ts.map +1 -1
- package/dist/tools/crawl.js +171 -88
- package/dist/tools/crawl.js.map +1 -1
- package/dist/tools/extract.d.ts +2 -2
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +175 -59
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/fetch.d.ts +2 -2
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +174 -68
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/find-similar.d.ts +5 -0
- package/dist/tools/find-similar.d.ts.map +1 -0
- package/dist/tools/find-similar.js +127 -0
- package/dist/tools/find-similar.js.map +1 -0
- package/dist/tools/research.d.ts +5 -0
- package/dist/tools/research.d.ts.map +1 -0
- package/dist/tools/research.js +107 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/search.d.ts +10 -2
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +13 -158
- package/dist/tools/search.js.map +1 -1
- package/dist/types.d.ts +350 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -1
- package/dist/types.js.map +1 -1
- package/dist/util/mode.d.ts +4 -0
- package/dist/util/mode.d.ts.map +1 -0
- package/dist/util/mode.js +34 -0
- package/dist/util/mode.js.map +1 -0
- package/package.json +78 -8
- package/dist/extraction/trafilatura.d.ts +0 -6
- package/dist/extraction/trafilatura.d.ts.map +0 -1
- package/dist/extraction/trafilatura.js +0 -105
- package/dist/extraction/trafilatura.js.map +0 -1
- package/dist/search/flashrank.d.ts +0 -12
- package/dist/search/flashrank.d.ts.map +0 -1
- package/dist/search/flashrank.js +0 -63
- package/dist/search/flashrank.js.map +0 -1
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { createLogger } from "../logger.js";
|
|
2
|
+
import {
|
|
3
|
+
requestSampling,
|
|
4
|
+
checkSamplingSupport
|
|
5
|
+
} from "../search/sampling.js";
|
|
6
|
+
const log = createLogger("research");
|
|
7
|
+
const DEPTH_SUB_QUERY_COUNT = {
|
|
8
|
+
quick: 2,
|
|
9
|
+
standard: 4,
|
|
10
|
+
comprehensive: 7
|
|
11
|
+
};
|
|
12
|
+
async function decomposeQuestion(question, depth, server) {
|
|
13
|
+
const targetCount = DEPTH_SUB_QUERY_COUNT[depth] ?? 4;
|
|
14
|
+
const queryType = detectQueryType(question);
|
|
15
|
+
if (server) {
|
|
16
|
+
try {
|
|
17
|
+
const result = await decomposeWithSampling(question, targetCount, server);
|
|
18
|
+
if (result) {
|
|
19
|
+
return { subQueries: result, samplingUsed: true, queryType };
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
log.warn("sampling decomposition failed, using fallback", {
|
|
23
|
+
error: err instanceof Error ? err.message : String(err)
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const templateQueries = decomposeWithTemplate(question, queryType, targetCount);
|
|
28
|
+
if (templateQueries && templateQueries.length >= targetCount) {
|
|
29
|
+
return { subQueries: templateQueries, samplingUsed: false, queryType };
|
|
30
|
+
}
|
|
31
|
+
if (templateQueries && templateQueries.length > 0) {
|
|
32
|
+
const fallback2 = decomposeWithFallback(question, targetCount);
|
|
33
|
+
const merged = [...templateQueries];
|
|
34
|
+
const seen = new Set(merged.map((q) => q.toLowerCase()));
|
|
35
|
+
for (const q of fallback2) {
|
|
36
|
+
if (merged.length >= targetCount) break;
|
|
37
|
+
if (!seen.has(q.toLowerCase())) {
|
|
38
|
+
merged.push(q);
|
|
39
|
+
seen.add(q.toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { subQueries: merged.slice(0, targetCount), samplingUsed: false, queryType };
|
|
43
|
+
}
|
|
44
|
+
const fallback = decomposeWithFallback(question, targetCount);
|
|
45
|
+
return { subQueries: fallback, samplingUsed: false, queryType };
|
|
46
|
+
}
|
|
47
|
+
async function decomposeWithSampling(question, targetCount, server) {
|
|
48
|
+
try {
|
|
49
|
+
if (!checkSamplingSupport(server)) {
|
|
50
|
+
log.debug("client does not support sampling");
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const prompt = `You are a research assistant. Break this question into exactly ${targetCount} distinct search queries that cover different aspects of the topic. Return a JSON object with a "subQueries" array of strings. Each query should be a concise search-engine-ready phrase (not a full sentence). Cover different angles: definitions, comparisons, current state, best practices, etc.
|
|
54
|
+
|
|
55
|
+
Question: ${question}
|
|
56
|
+
|
|
57
|
+
Respond with ONLY valid JSON: {"subQueries": ["query1", "query2", ...]}`;
|
|
58
|
+
const response = await requestSampling(
|
|
59
|
+
server,
|
|
60
|
+
[{ role: "user", content: { type: "text", text: prompt } }],
|
|
61
|
+
500
|
|
62
|
+
);
|
|
63
|
+
if (!response?.content?.text) {
|
|
64
|
+
log.debug("sampling returned empty response");
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const text = response.content.text.trim();
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = JSON.parse(text);
|
|
71
|
+
} catch {
|
|
72
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
73
|
+
if (jsonMatch) {
|
|
74
|
+
try {
|
|
75
|
+
parsed = JSON.parse(jsonMatch[0]);
|
|
76
|
+
} catch {
|
|
77
|
+
log.debug("could not extract JSON from sampling response");
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (typeof parsed !== "object" || parsed === null || !Array.isArray(parsed.subQueries)) {
|
|
85
|
+
log.debug("sampling response missing subQueries array");
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const subQueries = parsed.subQueries.filter((q) => typeof q === "string" && q.trim().length > 0).map((q) => q.trim());
|
|
89
|
+
if (subQueries.length < targetCount) {
|
|
90
|
+
log.debug("sampling returned fewer sub-queries than requested", {
|
|
91
|
+
expected: targetCount,
|
|
92
|
+
got: subQueries.length
|
|
93
|
+
});
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return subQueries.slice(0, targetCount);
|
|
97
|
+
} catch (err) {
|
|
98
|
+
log.debug("sampling request failed", {
|
|
99
|
+
error: err instanceof Error ? err.message : String(err)
|
|
100
|
+
});
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function detectQueryType(question) {
|
|
105
|
+
const q = question.trim().toLowerCase();
|
|
106
|
+
if (/\bvs\.?\s/i.test(q) || /\bversus\b/i.test(q) || /^compare\b/i.test(q)) {
|
|
107
|
+
return "comparison";
|
|
108
|
+
}
|
|
109
|
+
if (/\b(?:difference|differences)\s+between\b/i.test(q)) {
|
|
110
|
+
return "comparison";
|
|
111
|
+
}
|
|
112
|
+
if (/\b\w+\s+or\s+\w+\s+for\b/i.test(q)) {
|
|
113
|
+
return "comparison";
|
|
114
|
+
}
|
|
115
|
+
if (/^how\s+(?:to|do|does|can|should)\b/i.test(q) || /^steps\s+to\b/i.test(q)) {
|
|
116
|
+
return "how-to";
|
|
117
|
+
}
|
|
118
|
+
if (/^(?:what\s+(?:is|are)|explain|overview\s+of|describe)\b/i.test(q)) {
|
|
119
|
+
return "concept";
|
|
120
|
+
}
|
|
121
|
+
return "general";
|
|
122
|
+
}
|
|
123
|
+
const TRAILING_CATEGORY_NOUNS = /* @__PURE__ */ new Set([
|
|
124
|
+
"runtime",
|
|
125
|
+
"runtimes",
|
|
126
|
+
"framework",
|
|
127
|
+
"frameworks",
|
|
128
|
+
"library",
|
|
129
|
+
"libraries",
|
|
130
|
+
"tool",
|
|
131
|
+
"tools",
|
|
132
|
+
"language",
|
|
133
|
+
"languages",
|
|
134
|
+
"database",
|
|
135
|
+
"databases",
|
|
136
|
+
"db",
|
|
137
|
+
"dbs",
|
|
138
|
+
"platform",
|
|
139
|
+
"platforms",
|
|
140
|
+
"service",
|
|
141
|
+
"services",
|
|
142
|
+
"engine",
|
|
143
|
+
"engines",
|
|
144
|
+
"editor",
|
|
145
|
+
"editors",
|
|
146
|
+
"ide",
|
|
147
|
+
"ides",
|
|
148
|
+
"package",
|
|
149
|
+
"packages"
|
|
150
|
+
]);
|
|
151
|
+
function trimCategorySuffix(entity) {
|
|
152
|
+
const tokens = entity.trim().split(/\s+/);
|
|
153
|
+
while (tokens.length > 1) {
|
|
154
|
+
const last = tokens[tokens.length - 1].toLowerCase();
|
|
155
|
+
if (!TRAILING_CATEGORY_NOUNS.has(last)) break;
|
|
156
|
+
tokens.pop();
|
|
157
|
+
}
|
|
158
|
+
return tokens.join(" ");
|
|
159
|
+
}
|
|
160
|
+
function extractComparisonEntities(question) {
|
|
161
|
+
const cleaned = question.replace(/[?!.]/g, "").replace(/^(?:how\s+(?:does|do|is|are|about)|what\s+(?:is|are)\s+(?:the\s+)?(?:difference|differences)\s+(?:between)?|should\s+I\s+(?:use|choose)|which\s+is\s+better)\s*/i, "").trim();
|
|
162
|
+
const vsMatch = cleaned.match(/^(.+?)\s+(?:vs\.?|versus)\s+(.+?)(?:\s+(?:vs\.?|versus)\s+(.+?))?(?:\s+(?:for|in|with|when)\s+(.+))?$/i);
|
|
163
|
+
if (vsMatch) {
|
|
164
|
+
const entities = [vsMatch[1], vsMatch[2], vsMatch[3]].filter(Boolean).map((e) => trimCategorySuffix(e.trim()));
|
|
165
|
+
return { entities, context: vsMatch[4]?.trim() || "" };
|
|
166
|
+
}
|
|
167
|
+
const compareMatch = cleaned.match(/^compare\s+(.+?)(?:\s+(?:for|in|with|when)\s+(.+))?$/i);
|
|
168
|
+
if (compareMatch) {
|
|
169
|
+
const entityPart = compareMatch[1];
|
|
170
|
+
const entities = entityPart.split(/(?:,\s*|\s+and\s+)/).map((e) => trimCategorySuffix(e.trim())).filter(Boolean);
|
|
171
|
+
return { entities, context: compareMatch[2]?.trim() || "" };
|
|
172
|
+
}
|
|
173
|
+
const diffMatch = cleaned.match(/differences?\s+between\s+(.+?)\s+and\s+(.+?)(?:\s+(?:for|in|with)\s+(.+))?$/i);
|
|
174
|
+
if (diffMatch) {
|
|
175
|
+
return {
|
|
176
|
+
entities: [trimCategorySuffix(diffMatch[1].trim()), trimCategorySuffix(diffMatch[2].trim())],
|
|
177
|
+
context: diffMatch[3]?.trim() || ""
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return { entities: [], context: "" };
|
|
181
|
+
}
|
|
182
|
+
function decomposeWithTemplate(question, queryType, targetCount) {
|
|
183
|
+
if (queryType === "comparison") {
|
|
184
|
+
const { entities, context } = extractComparisonEntities(question);
|
|
185
|
+
if (entities.length < 2) return null;
|
|
186
|
+
const queries = [];
|
|
187
|
+
for (const entity of entities) {
|
|
188
|
+
queries.push(`${entity} ${context} features performance`.trim());
|
|
189
|
+
}
|
|
190
|
+
for (let i = 0; i < entities.length; i++) {
|
|
191
|
+
for (let j = i + 1; j < entities.length; j++) {
|
|
192
|
+
queries.push(`${entities[i]} vs ${entities[j]} ${context} comparison`.trim());
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
queries.push(`${entities.join(" vs ")} which to choose ${context}`.trim());
|
|
196
|
+
return [...new Set(queries)].slice(0, targetCount);
|
|
197
|
+
}
|
|
198
|
+
if (queryType === "how-to") {
|
|
199
|
+
const cleaned = question.replace(/[?!.]/g, "").trim();
|
|
200
|
+
const task = cleaned.replace(/^(?:how\s+(?:to|do\s+I|does\s+one|can\s+I|should\s+I)|steps\s+to)\s+/i, "").trim();
|
|
201
|
+
if (task.length < 5) return null;
|
|
202
|
+
const queries = [
|
|
203
|
+
`${task} tutorial guide`,
|
|
204
|
+
`${task} best practices`,
|
|
205
|
+
`${task} common mistakes pitfalls`,
|
|
206
|
+
`${task} examples production`,
|
|
207
|
+
`${task} step by step`,
|
|
208
|
+
`${task} tools libraries`,
|
|
209
|
+
`${task} troubleshooting`
|
|
210
|
+
];
|
|
211
|
+
return [...new Set(queries)].slice(0, targetCount);
|
|
212
|
+
}
|
|
213
|
+
if (queryType === "concept") {
|
|
214
|
+
const cleaned = question.replace(/[?!.]/g, "").trim();
|
|
215
|
+
const concept = cleaned.replace(/^(?:what\s+(?:is|are)|explain|overview\s+of|describe)\s+/i, "").trim();
|
|
216
|
+
if (concept.length < 3) return null;
|
|
217
|
+
const queries = [
|
|
218
|
+
`${concept} definition overview`,
|
|
219
|
+
`${concept} how it works architecture`,
|
|
220
|
+
`${concept} use cases applications`,
|
|
221
|
+
`${concept} alternatives comparison`,
|
|
222
|
+
`${concept} advantages disadvantages`,
|
|
223
|
+
`${concept} examples real world`,
|
|
224
|
+
`${concept} best practices`
|
|
225
|
+
];
|
|
226
|
+
return [...new Set(queries)].slice(0, targetCount);
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
function decomposeWithFallback(question, targetCount) {
|
|
231
|
+
const cleaned = question.trim();
|
|
232
|
+
if (!cleaned) {
|
|
233
|
+
return generateGenericQueries(targetCount);
|
|
234
|
+
}
|
|
235
|
+
const nounPhrases = extractNounPhrases(cleaned);
|
|
236
|
+
const clauseParts = splitAtClauseBoundaries(cleaned);
|
|
237
|
+
const candidates = [];
|
|
238
|
+
candidates.push(cleaned.length <= 200 ? cleaned : cleaned.slice(0, 200));
|
|
239
|
+
for (const clause of clauseParts) {
|
|
240
|
+
const trimmed = clause.trim();
|
|
241
|
+
if (trimmed.length > 3 && !candidates.includes(trimmed)) {
|
|
242
|
+
candidates.push(trimmed);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
for (const np of nounPhrases) {
|
|
246
|
+
if (np.length > 3 && !candidates.includes(np)) {
|
|
247
|
+
candidates.push(np);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const keywordVariants = generateKeywordVariants(cleaned);
|
|
251
|
+
for (const variant of keywordVariants) {
|
|
252
|
+
if (!candidates.includes(variant)) {
|
|
253
|
+
candidates.push(variant);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
while (candidates.length < targetCount) {
|
|
257
|
+
const idx = candidates.length;
|
|
258
|
+
candidates.push(`${cleaned} aspect ${idx + 1}`);
|
|
259
|
+
}
|
|
260
|
+
const unique = [...new Set(candidates)];
|
|
261
|
+
return unique.slice(0, targetCount);
|
|
262
|
+
}
|
|
263
|
+
function splitAtClauseBoundaries(text) {
|
|
264
|
+
const separators = [". ", "? ", "! ", "; ", ", and ", ", or ", " -- ", " - ", ", considering ", ", including "];
|
|
265
|
+
let parts = [text];
|
|
266
|
+
for (const sep of separators) {
|
|
267
|
+
if (parts.length >= 10) break;
|
|
268
|
+
parts = parts.flatMap((p) => {
|
|
269
|
+
const split = p.split(sep).map((s) => s.trim()).filter(Boolean);
|
|
270
|
+
return split.length > 1 ? split : [p];
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return parts;
|
|
274
|
+
}
|
|
275
|
+
function extractNounPhrases(text) {
|
|
276
|
+
const stopWords = /* @__PURE__ */ new Set([
|
|
277
|
+
"the",
|
|
278
|
+
"a",
|
|
279
|
+
"an",
|
|
280
|
+
"is",
|
|
281
|
+
"are",
|
|
282
|
+
"was",
|
|
283
|
+
"were",
|
|
284
|
+
"be",
|
|
285
|
+
"been",
|
|
286
|
+
"being",
|
|
287
|
+
"have",
|
|
288
|
+
"has",
|
|
289
|
+
"had",
|
|
290
|
+
"do",
|
|
291
|
+
"does",
|
|
292
|
+
"did",
|
|
293
|
+
"will",
|
|
294
|
+
"would",
|
|
295
|
+
"could",
|
|
296
|
+
"should",
|
|
297
|
+
"may",
|
|
298
|
+
"might",
|
|
299
|
+
"can",
|
|
300
|
+
"shall",
|
|
301
|
+
"to",
|
|
302
|
+
"of",
|
|
303
|
+
"in",
|
|
304
|
+
"for",
|
|
305
|
+
"on",
|
|
306
|
+
"with",
|
|
307
|
+
"at",
|
|
308
|
+
"by",
|
|
309
|
+
"from",
|
|
310
|
+
"as",
|
|
311
|
+
"into",
|
|
312
|
+
"through",
|
|
313
|
+
"during",
|
|
314
|
+
"before",
|
|
315
|
+
"after",
|
|
316
|
+
"above",
|
|
317
|
+
"below",
|
|
318
|
+
"between",
|
|
319
|
+
"out",
|
|
320
|
+
"off",
|
|
321
|
+
"over",
|
|
322
|
+
"under",
|
|
323
|
+
"again",
|
|
324
|
+
"further",
|
|
325
|
+
"then",
|
|
326
|
+
"once",
|
|
327
|
+
"and",
|
|
328
|
+
"but",
|
|
329
|
+
"or",
|
|
330
|
+
"nor",
|
|
331
|
+
"not",
|
|
332
|
+
"so",
|
|
333
|
+
"yet",
|
|
334
|
+
"both",
|
|
335
|
+
"either",
|
|
336
|
+
"neither",
|
|
337
|
+
"each",
|
|
338
|
+
"every",
|
|
339
|
+
"all",
|
|
340
|
+
"any",
|
|
341
|
+
"few",
|
|
342
|
+
"more",
|
|
343
|
+
"most",
|
|
344
|
+
"other",
|
|
345
|
+
"some",
|
|
346
|
+
"such",
|
|
347
|
+
"no",
|
|
348
|
+
"only",
|
|
349
|
+
"own",
|
|
350
|
+
"same",
|
|
351
|
+
"than",
|
|
352
|
+
"too",
|
|
353
|
+
"very",
|
|
354
|
+
"what",
|
|
355
|
+
"how",
|
|
356
|
+
"why",
|
|
357
|
+
"when",
|
|
358
|
+
"where",
|
|
359
|
+
"which",
|
|
360
|
+
"who",
|
|
361
|
+
"whom",
|
|
362
|
+
"this",
|
|
363
|
+
"that",
|
|
364
|
+
"these",
|
|
365
|
+
"those",
|
|
366
|
+
"i",
|
|
367
|
+
"me",
|
|
368
|
+
"my",
|
|
369
|
+
"we",
|
|
370
|
+
"our",
|
|
371
|
+
"you",
|
|
372
|
+
"your",
|
|
373
|
+
"he",
|
|
374
|
+
"him",
|
|
375
|
+
"his",
|
|
376
|
+
"she",
|
|
377
|
+
"her",
|
|
378
|
+
"it",
|
|
379
|
+
"its",
|
|
380
|
+
"they",
|
|
381
|
+
"them",
|
|
382
|
+
"their",
|
|
383
|
+
"vs",
|
|
384
|
+
"versus",
|
|
385
|
+
"compare",
|
|
386
|
+
"compared",
|
|
387
|
+
"comparison"
|
|
388
|
+
]);
|
|
389
|
+
const words = text.replace(/[?!.,;:'"()\[\]{}]/g, " ").split(/\s+/).filter(Boolean);
|
|
390
|
+
const contentWords = words.filter((w) => !stopWords.has(w.toLowerCase()));
|
|
391
|
+
const phrases = [];
|
|
392
|
+
for (let i = 0; i < contentWords.length; i++) {
|
|
393
|
+
for (let len = 2; len <= Math.min(4, contentWords.length - i); len++) {
|
|
394
|
+
const phrase = contentWords.slice(i, i + len).join(" ");
|
|
395
|
+
if (phrase.length > 5) {
|
|
396
|
+
phrases.push(phrase);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return [...new Set(phrases)];
|
|
401
|
+
}
|
|
402
|
+
function generateKeywordVariants(question) {
|
|
403
|
+
const variants = [];
|
|
404
|
+
const cleaned = question.replace(/[?!.]/g, "").trim();
|
|
405
|
+
const words = cleaned.split(/\s+/).filter((w) => w.length > 2);
|
|
406
|
+
if (words.length >= 3) {
|
|
407
|
+
variants.push(words.slice(0, Math.ceil(words.length / 2)).join(" "));
|
|
408
|
+
variants.push(words.slice(Math.floor(words.length / 2)).join(" "));
|
|
409
|
+
}
|
|
410
|
+
const questionPatterns = [
|
|
411
|
+
/^what\s+(are|is)\s+/i,
|
|
412
|
+
/^how\s+(do|does|to|can)\s+/i,
|
|
413
|
+
/^why\s+(do|does|is|are)\s+/i,
|
|
414
|
+
/^when\s+(do|does|should)\s+/i,
|
|
415
|
+
/^compare\s+/i,
|
|
416
|
+
/^explain\s+/i
|
|
417
|
+
];
|
|
418
|
+
for (const pat of questionPatterns) {
|
|
419
|
+
const stripped = cleaned.replace(pat, "").trim();
|
|
420
|
+
if (stripped !== cleaned && stripped.length > 5) {
|
|
421
|
+
variants.push(stripped);
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
return variants;
|
|
426
|
+
}
|
|
427
|
+
function generateGenericQueries(count) {
|
|
428
|
+
const queries = [];
|
|
429
|
+
for (let i = 0; i < count; i++) {
|
|
430
|
+
queries.push(`topic ${i + 1}`);
|
|
431
|
+
}
|
|
432
|
+
return queries;
|
|
433
|
+
}
|
|
434
|
+
export {
|
|
435
|
+
decomposeQuestion,
|
|
436
|
+
detectQueryType,
|
|
437
|
+
extractComparisonEntities
|
|
438
|
+
};
|
|
439
|
+
//# sourceMappingURL=decompose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/research/decompose.ts"],"sourcesContent":["import { createLogger } from '../logger.js';\nimport {\n type SamplingCapableServer,\n requestSampling,\n checkSamplingSupport,\n} from '../search/sampling.js';\n\nconst log = createLogger('research');\n\nconst DEPTH_SUB_QUERY_COUNT: Record<string, number> = {\n quick: 2,\n standard: 4,\n comprehensive: 7,\n};\n\nexport type QueryType = 'comparison' | 'how-to' | 'concept' | 'general';\n\nexport interface DecomposeResult {\n subQueries: string[];\n samplingUsed: boolean;\n queryType: QueryType;\n}\n\nexport async function decomposeQuestion(\n question: string,\n depth: 'quick' | 'standard' | 'comprehensive',\n server?: SamplingCapableServer,\n): Promise<DecomposeResult> {\n const targetCount = DEPTH_SUB_QUERY_COUNT[depth] ?? 4;\n const queryType = detectQueryType(question);\n\n if (server) {\n try {\n const result = await decomposeWithSampling(question, targetCount, server);\n if (result) {\n return { subQueries: result, samplingUsed: true, queryType };\n }\n } catch (err) {\n log.warn('sampling decomposition failed, using fallback', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const templateQueries = decomposeWithTemplate(question, queryType, targetCount);\n if (templateQueries && templateQueries.length >= targetCount) {\n return { subQueries: templateQueries, samplingUsed: false, queryType };\n }\n\n // Template produced some queries but not enough — supplement with fallback\n if (templateQueries && templateQueries.length > 0) {\n const fallback = decomposeWithFallback(question, targetCount);\n const merged = [...templateQueries];\n const seen = new Set(merged.map(q => q.toLowerCase()));\n for (const q of fallback) {\n if (merged.length >= targetCount) break;\n if (!seen.has(q.toLowerCase())) {\n merged.push(q);\n seen.add(q.toLowerCase());\n }\n }\n return { subQueries: merged.slice(0, targetCount), samplingUsed: false, queryType };\n }\n\n const fallback = decomposeWithFallback(question, targetCount);\n return { subQueries: fallback, samplingUsed: false, queryType };\n}\n\nasync function decomposeWithSampling(\n question: string,\n targetCount: number,\n server: SamplingCapableServer,\n): Promise<string[] | null> {\n try {\n if (!checkSamplingSupport(server)) {\n log.debug('client does not support sampling');\n return null;\n }\n\n const prompt = `You are a research assistant. Break this question into exactly ${targetCount} distinct search queries that cover different aspects of the topic. Return a JSON object with a \"subQueries\" array of strings. Each query should be a concise search-engine-ready phrase (not a full sentence). Cover different angles: definitions, comparisons, current state, best practices, etc.\n\nQuestion: ${question}\n\nRespond with ONLY valid JSON: {\"subQueries\": [\"query1\", \"query2\", ...]}`;\n\n const response = await requestSampling(\n server,\n [{ role: 'user', content: { type: 'text', text: prompt } }],\n 500,\n );\n\n if (!response?.content?.text) {\n log.debug('sampling returned empty response');\n return null;\n }\n\n const text = response.content.text.trim();\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n try {\n parsed = JSON.parse(jsonMatch[0]);\n } catch {\n log.debug('could not extract JSON from sampling response');\n return null;\n }\n } else {\n return null;\n }\n }\n\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n !Array.isArray((parsed as Record<string, unknown>).subQueries)\n ) {\n log.debug('sampling response missing subQueries array');\n return null;\n }\n\n const subQueries = (parsed as { subQueries: unknown[] }).subQueries\n .filter((q): q is string => typeof q === 'string' && q.trim().length > 0)\n .map((q) => q.trim());\n\n if (subQueries.length < targetCount) {\n log.debug('sampling returned fewer sub-queries than requested', {\n expected: targetCount,\n got: subQueries.length,\n });\n return null;\n }\n\n return subQueries.slice(0, targetCount);\n } catch (err) {\n log.debug('sampling request failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n}\n\nexport function detectQueryType(question: string): QueryType {\n const q = question.trim().toLowerCase();\n\n // Comparison: \"X vs Y\", \"X versus Y\", \"compare X and Y\", \"X or Y for Z\"\n if (/\\bvs\\.?\\s/i.test(q) || /\\bversus\\b/i.test(q) || /^compare\\b/i.test(q)) {\n return 'comparison';\n }\n if (/\\b(?:difference|differences)\\s+between\\b/i.test(q)) {\n return 'comparison';\n }\n // \"X or Y for Z\" pattern (choice between alternatives)\n if (/\\b\\w+\\s+or\\s+\\w+\\s+for\\b/i.test(q)) {\n return 'comparison';\n }\n\n // How-to: \"how to ...\", \"how do I ...\", \"how can I ...\", \"steps to ...\"\n if (/^how\\s+(?:to|do|does|can|should)\\b/i.test(q) || /^steps\\s+to\\b/i.test(q)) {\n return 'how-to';\n }\n\n // Concept: \"what is ...\", \"explain ...\", \"overview of ...\"\n if (/^(?:what\\s+(?:is|are)|explain|overview\\s+of|describe)\\b/i.test(q)) {\n return 'concept';\n }\n\n return 'general';\n}\n\n// Generic category nouns that often pad onto a proper entity name when the\n// user phrases a question like \"differences between Bun and Deno runtimes\".\n// We strip them as a trailing token so entities resolve to \"Bun\"/\"Deno\".\nconst TRAILING_CATEGORY_NOUNS = new Set([\n 'runtime', 'runtimes',\n 'framework', 'frameworks',\n 'library', 'libraries',\n 'tool', 'tools',\n 'language', 'languages',\n 'database', 'databases', 'db', 'dbs',\n 'platform', 'platforms',\n 'service', 'services',\n 'engine', 'engines',\n 'editor', 'editors',\n 'ide', 'ides',\n 'package', 'packages',\n]);\n\nfunction trimCategorySuffix(entity: string): string {\n const tokens = entity.trim().split(/\\s+/);\n while (tokens.length > 1) {\n const last = tokens[tokens.length - 1].toLowerCase();\n if (!TRAILING_CATEGORY_NOUNS.has(last)) break;\n tokens.pop();\n }\n return tokens.join(' ');\n}\n\nexport function extractComparisonEntities(question: string): { entities: string[]; context: string } {\n // Strip common question prefixes so \"how does X vs Y\" still matches\n const cleaned = question\n .replace(/[?!.]/g, '')\n .replace(/^(?:how\\s+(?:does|do|is|are|about)|what\\s+(?:is|are)\\s+(?:the\\s+)?(?:difference|differences)\\s+(?:between)?|should\\s+I\\s+(?:use|choose)|which\\s+is\\s+better)\\s*/i, '')\n .trim();\n\n // \"X vs Y vs Z for/in/with context\"\n const vsMatch = cleaned.match(/^(.+?)\\s+(?:vs\\.?|versus)\\s+(.+?)(?:\\s+(?:vs\\.?|versus)\\s+(.+?))?(?:\\s+(?:for|in|with|when)\\s+(.+))?$/i);\n if (vsMatch) {\n const entities = [vsMatch[1], vsMatch[2], vsMatch[3]]\n .filter(Boolean)\n .map(e => trimCategorySuffix(e!.trim()));\n return { entities, context: vsMatch[4]?.trim() || '' };\n }\n\n // \"compare X and Y for context\" / \"compare X, Y, and Z\"\n const compareMatch = cleaned.match(/^compare\\s+(.+?)(?:\\s+(?:for|in|with|when)\\s+(.+))?$/i);\n if (compareMatch) {\n const entityPart = compareMatch[1];\n const entities = entityPart\n .split(/(?:,\\s*|\\s+and\\s+)/)\n .map(e => trimCategorySuffix(e.trim()))\n .filter(Boolean);\n return { entities, context: compareMatch[2]?.trim() || '' };\n }\n\n // \"differences between X and Y\"\n const diffMatch = cleaned.match(/differences?\\s+between\\s+(.+?)\\s+and\\s+(.+?)(?:\\s+(?:for|in|with)\\s+(.+))?$/i);\n if (diffMatch) {\n return {\n entities: [trimCategorySuffix(diffMatch[1].trim()), trimCategorySuffix(diffMatch[2].trim())],\n context: diffMatch[3]?.trim() || '',\n };\n }\n\n return { entities: [], context: '' };\n}\n\nfunction decomposeWithTemplate(question: string, queryType: QueryType, targetCount: number): string[] | null {\n if (queryType === 'comparison') {\n const { entities, context } = extractComparisonEntities(question);\n if (entities.length < 2) return null;\n\n const queries: string[] = [];\n\n // Per-entity queries\n for (const entity of entities) {\n queries.push(`${entity} ${context} features performance`.trim());\n }\n // Cross-comparison queries\n for (let i = 0; i < entities.length; i++) {\n for (let j = i + 1; j < entities.length; j++) {\n queries.push(`${entities[i]} vs ${entities[j]} ${context} comparison`.trim());\n }\n }\n // Ecosystem/adoption query\n queries.push(`${entities.join(' vs ')} which to choose ${context}`.trim());\n\n return [...new Set(queries)].slice(0, targetCount);\n }\n\n if (queryType === 'how-to') {\n const cleaned = question.replace(/[?!.]/g, '').trim();\n const task = cleaned.replace(/^(?:how\\s+(?:to|do\\s+I|does\\s+one|can\\s+I|should\\s+I)|steps\\s+to)\\s+/i, '').trim();\n if (task.length < 5) return null;\n\n const queries = [\n `${task} tutorial guide`,\n `${task} best practices`,\n `${task} common mistakes pitfalls`,\n `${task} examples production`,\n `${task} step by step`,\n `${task} tools libraries`,\n `${task} troubleshooting`,\n ];\n\n return [...new Set(queries)].slice(0, targetCount);\n }\n\n if (queryType === 'concept') {\n const cleaned = question.replace(/[?!.]/g, '').trim();\n const concept = cleaned.replace(/^(?:what\\s+(?:is|are)|explain|overview\\s+of|describe)\\s+/i, '').trim();\n if (concept.length < 3) return null;\n\n const queries = [\n `${concept} definition overview`,\n `${concept} how it works architecture`,\n `${concept} use cases applications`,\n `${concept} alternatives comparison`,\n `${concept} advantages disadvantages`,\n `${concept} examples real world`,\n `${concept} best practices`,\n ];\n\n return [...new Set(queries)].slice(0, targetCount);\n }\n\n return null;\n}\n\nfunction decomposeWithFallback(question: string, targetCount: number): string[] {\n const cleaned = question.trim();\n if (!cleaned) {\n return generateGenericQueries(targetCount);\n }\n\n const nounPhrases = extractNounPhrases(cleaned);\n const clauseParts = splitAtClauseBoundaries(cleaned);\n const candidates: string[] = [];\n\n candidates.push(cleaned.length <= 200 ? cleaned : cleaned.slice(0, 200));\n\n for (const clause of clauseParts) {\n const trimmed = clause.trim();\n if (trimmed.length > 3 && !candidates.includes(trimmed)) {\n candidates.push(trimmed);\n }\n }\n\n for (const np of nounPhrases) {\n if (np.length > 3 && !candidates.includes(np)) {\n candidates.push(np);\n }\n }\n\n const keywordVariants = generateKeywordVariants(cleaned);\n for (const variant of keywordVariants) {\n if (!candidates.includes(variant)) {\n candidates.push(variant);\n }\n }\n\n while (candidates.length < targetCount) {\n const idx = candidates.length;\n candidates.push(`${cleaned} aspect ${idx + 1}`);\n }\n\n const unique = [...new Set(candidates)];\n return unique.slice(0, targetCount);\n}\n\nfunction splitAtClauseBoundaries(text: string): string[] {\n const separators = ['. ', '? ', '! ', '; ', ', and ', ', or ', ' -- ', ' - ', ', considering ', ', including '];\n let parts = [text];\n\n for (const sep of separators) {\n if (parts.length >= 10) break;\n parts = parts.flatMap((p) => {\n const split = p.split(sep).map((s) => s.trim()).filter(Boolean);\n return split.length > 1 ? split : [p];\n });\n }\n\n return parts;\n}\n\nfunction extractNounPhrases(text: string): string[] {\n const stopWords = new Set([\n 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',\n 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',\n 'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',\n 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',\n 'before', 'after', 'above', 'below', 'between', 'out', 'off', 'over',\n 'under', 'again', 'further', 'then', 'once', 'and', 'but', 'or',\n 'nor', 'not', 'so', 'yet', 'both', 'either', 'neither', 'each',\n 'every', 'all', 'any', 'few', 'more', 'most', 'other', 'some',\n 'such', 'no', 'only', 'own', 'same', 'than', 'too', 'very',\n 'what', 'how', 'why', 'when', 'where', 'which', 'who', 'whom',\n 'this', 'that', 'these', 'those', 'i', 'me', 'my', 'we', 'our',\n 'you', 'your', 'he', 'him', 'his', 'she', 'her', 'it', 'its',\n 'they', 'them', 'their',\n 'vs', 'versus', 'compare', 'compared', 'comparison',\n ]);\n\n const words = text.replace(/[?!.,;:'\"()\\[\\]{}]/g, ' ').split(/\\s+/).filter(Boolean);\n const contentWords = words.filter((w) => !stopWords.has(w.toLowerCase()));\n const phrases: string[] = [];\n\n for (let i = 0; i < contentWords.length; i++) {\n for (let len = 2; len <= Math.min(4, contentWords.length - i); len++) {\n const phrase = contentWords.slice(i, i + len).join(' ');\n if (phrase.length > 5) {\n phrases.push(phrase);\n }\n }\n }\n\n return [...new Set(phrases)];\n}\n\nfunction generateKeywordVariants(question: string): string[] {\n const variants: string[] = [];\n const cleaned = question.replace(/[?!.]/g, '').trim();\n const words = cleaned.split(/\\s+/).filter((w) => w.length > 2);\n\n if (words.length >= 3) {\n variants.push(words.slice(0, Math.ceil(words.length / 2)).join(' '));\n variants.push(words.slice(Math.floor(words.length / 2)).join(' '));\n }\n\n const questionPatterns = [\n /^what\\s+(are|is)\\s+/i,\n /^how\\s+(do|does|to|can)\\s+/i,\n /^why\\s+(do|does|is|are)\\s+/i,\n /^when\\s+(do|does|should)\\s+/i,\n /^compare\\s+/i,\n /^explain\\s+/i,\n ];\n for (const pat of questionPatterns) {\n const stripped = cleaned.replace(pat, '').trim();\n if (stripped !== cleaned && stripped.length > 5) {\n variants.push(stripped);\n break;\n }\n }\n\n return variants;\n}\n\nfunction generateGenericQueries(count: number): string[] {\n const queries: string[] = [];\n for (let i = 0; i < count; i++) {\n queries.push(`topic ${i + 1}`);\n }\n return queries;\n}\n"],"mappings":"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","names":["fallback"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type SamplingCapableServer } from '../search/sampling.js';
|
|
2
|
+
import type { ResearchInput, ResearchOutput, SearchEngine } from '../types.js';
|
|
3
|
+
import type { SmartRouter } from '../fetch/router.js';
|
|
4
|
+
export declare function runResearchPipeline(input: ResearchInput, engines: SearchEngine[], router: SmartRouter, server?: SamplingCapableServer): Promise<ResearchOutput>;
|
|
5
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/research/pipeline.ts"],"names":[],"mappings":"AAcA,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEzF,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAEd,YAAY,EAEb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2BtD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAwMzB"}
|